javascript中符号传播右移和零填充右移的区别?
据我所知 符号传播右移(a>>b):将二进制表示中的a位右移,丢弃移位的位 例:8>>2将返回2。因为二进制1000将右移2次并返回0010 零填充右移(a>>>b):将二进制表示法中的a位右移,丢弃移开的位,并从左移入零 例:8>>2返回2。它也返回相同的值javascript中符号传播右移和零填充右移的区别?,javascript,Javascript,据我所知 符号传播右移(a>>b):将二进制表示中的a位右移,丢弃移位的位 例:8>>2将返回2。因为二进制1000将右移2次并返回0010 零填充右移(a>>>b):将二进制表示法中的a位右移,丢弃移开的位,并从左移入零 例:8>>2返回2。它也返回相同的值 那么>和>运算符之间的区别是什么?为什么javascript使用这两个运算符而不是一个,或者如果我错了,请指导我获得正确的概念?按位运算符假定其操作数是32位有符号整数 以2为基数的0000000000000000000000 1000等
那么
>
和>
运算符之间的区别是什么?为什么javascript使用这两个运算符而不是一个,或者如果我错了,请指导我获得正确的概念?按位运算符假定其操作数是32位有符号整数
以2为基数的0000000000000000000000 1000
等于以10为基数的8
。
在
8>>2
中,符号传播向右移位运算符(>>)将二进制数移位两位,保留符号(第一位):
以2为基数的00000000000000000010
等于以10为基数的2
在8>>>2
中,零填充右移位运算符(>>>)将二进制数移位两位,在左位填充0:
以2为基数的00000000000000000010
等于以10为基数的2
它们是相同的,只是因为正二进制数的第一位是零
从:
对于非负数,零填充右移和符号传播
右移也会产生同样的结果
然而,对于负数,情况看起来有所不同:
11111111111111 000
在基数2中等于-8
在基数10中
在-8>>2
中,符号传播向右移位运算符(>>)将二进制数移位两位,保留符号:
基2中的1111111111111111111 0
等于基10中的-2
在-8>>>2
中,零填充右移位运算符(>>>)将二进制数移位两位,用0填充左位:
00111111111111111111110
在基数2中等于1073741822
。试试-8>>2
:-2 vs.-8>>2
:1073741822能给你正确的答案你能举个例子说明每一个都用负数吗?为什么要用>>而不是>>,反之亦然?有人能解释一下吗为什么会发生这种情况<代码>数字.MAX_SAFE_INTEGER是9007199254740991
和Number.MAX_SAFE_INTEGER.toString(2)
是“11111111111111111111111111”
所以数字.MAX_SAFE_INTEGER>>1
是-1
。