function invert(x) {
let significant = 0;
let test = x;
while (test > 1) {
test = test >> 1;
significant = (significant << 1) | 1;
}
return (~x) & significant;
}
console.log(invert(5)); // 2 (010 in binary)
// Requires support for ECMAScript ed 5.1 for map and
// ECMAScript 2015 for arrow functions
function flipStringBits(s) {
return s.split('').map(c => 1 - c).join('');
}
['0','010','110','10011100110'].forEach(
v => console.log(v + ' -> ' + flipStringBits(v))
);
ECMAScript艾德3的基本功能(适用于任何地方,甚至IE 4)。
function flipStringBitsEd3(s) {
var b = s.split('')
for (var i = 0, iLen = b.length; i < iLen; i++) {
b[i] = 1 - b[i];
}
return b.join('');
}
// Tests
console.log('Ed 3 version');
var data = ['0', '010', '110', '10011100110'];
for (var i = 0, iLen = data.length; i < iLen; i++) {
console.log(data[i] + ' ->\n' + flipStringBitsEd3(data[i]) + '\n');
}
8条答案
按热度按时间vsnjm48y1#
您可以创建一个函数,像这样翻转所需的位数
注意-这不是“任意数量的比特”…最多32岁
使用字符串,你可以有任意的位长度(这一个不会工作,而不转译在Internet Exploder)
以上是ES 5中的
vfhzx4xs2#
反转位总是相同的,但是要将无符号整数转换为有符号整数,您可以使用unsigned
>>>
移位运算符来处理无符号数:如果你想确保只翻转数字中的有效位,你可以通过一个
&
操作来屏蔽它,需要多少个有效位。以下是有效位掩码的示例:rdlzhqv93#
在JavaScript中,~或波浪号可以完成此操作
因此,您当前的操作是正确的,但不是您要查找的:
Reference
uurv41yg4#
您可以将
String.prototype.replace()
与RegExp
/(0)|(1)/
一起使用kq4fsx7k5#
您可以使用一个函数将数字转换为二进制字符串,翻转0和1,然后转换回数字。它似乎给予了预期的结果,但看起来相当丑陋:
也许有一个混合的按位运算符做同样的事情。
编辑
看起来你正在使用字符串,所以只需拆分,翻转并再次加入:
ECMAScript艾德3的基本功能(适用于任何地方,甚至IE 4)。
适用于任何长度的字符串。艾德3版本将在任何地方工作,并且可能比使用较新功能的函数更快。
uqjltbpv6#
您可以为数字的宽度创建一个掩码,并使用
xor
来翻转位。8ftvxx2r7#
对于Integer值,可以使用javaScript程序来反转给定整数中的位的顺序,并返回新的整数,如下所述:
输出:
yrwegjxp8#
它接受一个二进制数字串并返回其逆数。如果字符串有前导0,它们也会变成1。