在javascript中反转无符号任意二进制位

在javascript中反转无符号任意二进制位,javascript,Javascript,例如,10100将被反转为01011;010将反转为101;101将转换为010 问题是当我使用~5时,它变成了-6,因为js使用32位有符号 如何反转无符号任意位二进制数 我想创建一个函数,它接受这个无符号的任意位二进制数并返回它的反转形式(101->010) 我想将字符串101转换为010,反转位将始终相同,但要将无符号整数转换为有符号整数,可以使用无符号的移位运算符处理无符号数字: console.log(~5);//-6. console.log(~5>>>0);//4294967290

例如,10100将被反转为01011;010将反转为101;101将转换为010

问题是当我使用~5时,它变成了-6,因为js使用32位有符号

如何反转无符号任意位二进制数

我想创建一个函数,它接受这个无符号的任意位二进制数并返回它的反转形式(101->010)


我想将字符串101转换为010,反转位将始终相同,但要将无符号整数转换为有符号整数,可以使用无符号的移位运算符处理无符号数字:

console.log(~5);//-6.
console.log(~5>>>0);//4294967290
如果要确保只翻转数字中的有效位,则需要通过
&
操作将其屏蔽为所需的有效位数。以下是有效位屏蔽的示例:

函数反转(x){
设有效=0;
设test=x;
而(测试>1){
测试=测试>>1;

显着=(在JavaScript中显着,~或tilde执行此操作

-(N+1)

因此,您当前的操作是正确的,但不是您想要的:

~5
-(5 + 1)
-6

您可以创建一个翻转所需位数的函数,如下所示

var flipbits=函数(v,数字){
返回~v&(数学功率(2,数字)-1);
}
log(flipbits(5,3));//输出2

console.log(flipbits(2,3));//输出5
您可以使用一个函数,将数字转换为二进制字符串,翻转0和1,然后再转换回数字。它似乎给出了预期的结果,但看起来很难看:

功能翻转位(n){
返回parseInt(n.toString(2).split(“”).map(位=>1位).join(“”),2)
}
[0,1,2,3,4,5123987776987679875]。forEach(
n=>console.log(n+'->'+flipBits(n))

)
您可以使用
String.prototype.replace()
替换为
RegExp
/(0)|(1)/

功能切换(n){
返回n.replace(/(0)|(1)/g,函数(m,p1,p2){返回p2?0:1});
}
console.log(
切换(“10100”),
切换(“101”)

)
您可以为数字的宽度创建一个掩码,并使用异或来翻转位

/**
*@param{number}num
*@return{number}
*/
var findComplement=函数(num){
设len=num.toString(2).长度;
设mask=Math.pow(2,len)-1;
返回num^掩码;
};

console.log(findComplement(5));
对于整数值,您可以使用javaScript程序反转给定整数中位的顺序,结果返回新整数,如下所述:

function binaryReverse(value) {
  return parseInt(value.toString(2).split('').reverse().join(''), 2);
}

console.log(binaryReverse(25));
console.log(binaryReverse(19));
输出:

 19
 25

010->101…你如何确定你应该只翻转3位?为什么不像10100->01011中那样翻转5位?我不能使用~5u,因为我想传入一个数字,比如101,然后使用这个函数返回0100。你正在传入字符串?比如“010”,这可以工作是的,但我想问你如何确定要翻转的位数…010==00000000 10…但是101!==1111111101@JaromandaX翻转之后,010应该是101;也就是说,它应该切断101的任何剩余位。这将适用于多达32(或31?)的“任意位二进制”仅限位…任意表示任意位数:pusing有效位…010->01,而不是101-问题是如何确定有效位数的问题太模糊了5=101;因此我们要反转的是3个“有效”位(其余的保持为0,好像它们与原始数无关).他不是从2->5开始,只是从5->2开始。
010将被反转为101
-这是个问题,但5是101->010还是2。这对二进制有效吗?就像我将传递二进制而不是十进制。它意味着101到010(但不是10)
这适用于二进制吗?
由1和0组成的字符串本身不是二进制的。javascript中的所有数字都是二进制的,您可以用二进制、八进制、十进制、十六进制以及您可以想象的所有基数来显示它们……但是如果您使用的是1和0的字符串(在javascript字符串中)然后第二位代码就是你想要的当我放入第二位代码时,它会给我错误。它看起来不像一个函数。我应该也包括第一位吗?我是Javascript新手你可能正在使用internet explorer然后-使用第三个代码段-它是ES5,internet exploder几乎可以理解,你不需要
1中的parseInt-parseInt(b)
,操作员将执行数字转换;-)警告,OP的环境不支持ES2015+:p@JaromandaX-好的,添加了符合ED3标准的代码。没有在IE4中测试,但我希望它在那里也能工作。;-)