Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript和Python按位OR操作给出了不同的结果_Javascript_Python_Numbers_Bitwise Or - Fatal编程技术网

JavaScript和Python按位OR操作给出了不同的结果

JavaScript和Python按位OR操作给出了不同的结果,javascript,python,numbers,bitwise-or,Javascript,Python,Numbers,Bitwise Or,JS console.log(1 | 1);//1. console.log(1 | 0x8);//9 console.log(1 | 0x8000000);//-2147483647 蟒蛇 打印(1 | 1)#1 打印(1 | 0x8)#9 打印(1 | 0x8000000)#2147483649 为什么最后一个示例中的结果不同?中描述了JavaScript行为 所有按位运算符的操作数都转换为2的补码格式的有符号32位整数,但零填充右移导致无符号32位整数除外 因此,JavaScript中

JS

console.log(1 | 1);//1.
console.log(1 | 0x8);//9
console.log(1 | 0x8000000);//-2147483647
蟒蛇

打印(1 | 1)#1
打印(1 | 0x8)#9
打印(1 | 0x8000000)#2147483649

为什么最后一个示例中的结果不同?

中描述了JavaScript行为

所有按位运算符的操作数都转换为2的补码格式的有符号32位整数,但零填充右移导致无符号32位整数除外

因此,JavaScript中会出现负数,因为它将该值视为32位有符号数。
0x8000000
位是符号位

上面引号末尾的限定符指出了获得与Python相同结果的方法:


console.log((1 | 0x8000000)>>0)中描述了JavaScript行为

所有按位运算符的操作数都转换为2的补码格式的有符号32位整数,但零填充右移导致无符号32位整数除外

因此,JavaScript中会出现负数,因为它将该值视为32位有符号数。
0x8000000
位是符号位

上面引号末尾的限定符指出了获得与Python相同结果的方法:


console.log((1 | 0x8000000)>>0)
Python数字与JavaScript数字不同。Python有无限精度整数,JavaScript整数是32位有符号的。@Barmar我以为JS实际上没有整数数据类型,所有的数字都是隐藏的浮点。@juanpa.arrivillaga按位运算符在内部使用32位有符号的数字。@Barmar很高兴知道,这很有道理。Python的数字与JavaScript的数字不同。Python有无限精度的整数,JavaScript整数是32位有符号的。@Barmar我以为JS甚至没有真正的整数数据类型,而且所有的数字都是隐藏的浮点。@juanpa.arrivillaga按位运算符在内部使用32位有符号的数字。@Barmar很高兴知道,这对解释很有意义!我无法摆脱JS中的按位表示有缺陷的感觉。例如,众所周知,如果您错误地使用带符号的int,那么在C中会得到相同的结果。感谢您的解释!我无法摆脱JS中的按位表示有缺陷的感觉。例如,众所周知,如果您错误地使用带符号的int,那么在C中会得到相同的结果。