在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

我在Javascript中注意到了一件事-


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