JavaScript>>
(有符号右移) 和>>>
(无符号右移)的区别
之所以以 JS 为例,是因为Java中不支持无符号操作
直接看MDN英文吧:
>> (有符号右移)
sign-propagating(符号位-传播)右移
我们知道,计算机中以二进制存储数字,二进制中最左边的第一位,叫符号位,所以这就很明显了,右移2位后,最左边缺少2位数字,那就应该填充数字,那填充什么呢?符号位是什么,我就填什么,所以-9 >> 2
中最左边2位和符号位一样,都是1。
>>> (无符号右移)
zero-fill(零-填充)
这个就更明显了,直接就说了,用0填充,所以右移后空位不管你符号位是啥,我都只填0。
总结
因此,我们所说的有符号、无符号看的就是二进制的符号位
无符号:就是不管符号位,右移只填充0;有符号:就是符号位是啥,我就填充啥。Java中也是同理。