例如,10100 将反转为 01011; 010 将反转为 101; 101 将转换为 010。
问题是当我使用 ~5 时,它变成了 -6,因为 js 使用 32 位签名。
如何反转无符号任意位二进制数?
我想创建一个函数,接受这个无符号的任意位二进制数并返回它的倒置形式(101->010)
我想从字符串 101 转换为 010
最佳答案
你可以创建一个像这样翻转所需位数的函数
var flipbits = function (v, digits) {
return ~v & (Math.pow(2, digits) - 1);
}
console.log(flipbits(5, 3)); // outputs 2
console.log(flipbits(2, 3)); // outputs 5
注意——这不是“任意位数”……最多是 32
working with strings, you can have arbitrary bit length (this one wont work without transpiling in Internet Exploder)
var flipbits = str => str.split('').map(b => (1 - b).toString()).join('');
console.log(flipbits('010')); // outputs 101
console.log(flipbits('101')); // outputs 010
The above in ES5
var flipbits = function flipbits(str) {
return str.split('').map(function (b) {
return (1 - b).toString();
}).join('');
};
console.log(flipbits('010')); // outputs 101
console.log(flipbits('101')); // outputs 010
关于javascript - 在javascript中反转无符号的任意二进制位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42450510/