繁体   English   中英

javascript按位异或产生不一致的结果

[英]javascript bitwise xor producing inconsistent result

我在javascript中使用按位运算,但是我注意到某些东西似乎不一致。

现在,我正在使用XOR(^)操作。 当我执行'0101'^'0001' ,得到4,这是有道理的,因为二进制中4 = 0100。 但是,当我执行'10001'^'01111' ,我得到9030,而我认为应该得到11110。就我所知,格式是相同的。 只有字符串不同。

console.log(5^1); //4
console.log('0101'^'0001'); // 100 = 4

console.log(17^15); //30
console.log('10001'^'01111'); //9030...why? shouldn't it be '11110'?

为什么此代码会产生此结果?

现在,如果我这样做:

console.log(('0b'+'10001')^('0b' + '01111')); //30

为什么在17和15上执行按位运算时,我必须添加'0b'来指定字符串是二进制序列,而在5和1上却不是?

您在字符串上使用^运算符。 当在字符串上使用任何数字运算符时,JavaScript会将字符串隐式转换为数字。 0b告诉JavaScript将您的数字视为二进制数或以2为基数的数字。

否则,默认情况下,它们将转换为十进制或以10为底的值。

对字符串表示的二进制值进行运算,您必须首先将值转换为以2为底的数字值。

您可以在计算器中验证10,001 ^ 1111 = 9030。

在二进制1111 = 15和10001 = 17中。 15 ^ 17 = 30,它是二进制的11110‬。

101 Xor 1是一种特殊情况,十进制101 Xor 1 =100。二进制101 = 5和5 Xor 1 = 4,以二进制形式写为100。

正如已经指出的那样,您没有使用二进制数。 使用0b前缀表示二进制数字,并使用toString(2)进行转换:

console.log((0b10001 ^ 0b01111).toString(2));
11110

第一个示例可以使用,因为十进制的1与二进制的1相同。 结果是100(十进制),而不是4。JavaScript不在内部存储数字格式。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM