在Javascript中使用负移位计数左移位
我在Javascript中注意到了一件事-在Javascript中使用负移位计数左移位,javascript,bitwise-operators,Javascript,Bitwise Operators,我在Javascript中注意到了一件事- a得到了我问题第二部分的答案,即-2>>1=7 Javascript总是处理32位。所以当我做-2>>1时,引擎盖下真正发生的是- 1111111111111111111111 0>>1给出011111111111111111=(2147483647)base10左移位运算符将零添加到数字二进制表示的右侧,将位向左移位。仅使用加法表达式的5个最低有效位。因此: var x = 5 // 101 alert( x << 1
a得到了我问题第二部分的答案,即
-2>>1=7
Javascript总是处理32位。所以当我做-2>>1
时,引擎盖下真正发生的是-
1111111111111111111111 0>>1
给出011111111111111111=(2147483647)base10
左移位运算符将零添加到数字二进制表示的右侧,将位向左移位。仅使用加法表达式的5个最低有效位。因此:
var x = 5 // 101
alert( x << 1 ); // 1010 = 10
alert( x << 2 ); // 10100 = 20
alert( x << 3 ); // 101000 = 40
alert( x << 4 ); // 1010000 = 80
alert( x << 64 ); // 101 = 5
var x=5//101
alert(x我也很想知道我是如何来到这里的。我做了一些研究并弄清楚了行为。本质上JavaScript将操作数和移位值视为位序列而不是数字。它使用32位整数(浮点被截断)最大移位量为32位。如果移位量大于32,则所有位都会向外移位,结果为零。为了确保移位量小于或等于32位,JavaScript会截断5个最低有效位[a]
var x = 5 // 101
alert( x << 1 ); // 1010 = 10
alert( x << 2 ); // 10100 = 20
alert( x << 3 ); // 101000 = 40
alert( x << 4 ); // 1010000 = 80
alert( x << 64 ); // 101 = 5