使用按位操作进行一些测试/使用JavaScript进行移位
0x80000000 >> 1 // returns -1073741824 (-0x40000000)
我希望从
开始返回0x400000000x40000000 >> 1 // returns 0x20000000
0x20000000 >> 1 // returns 0x10000000
答案 0 :(得分:9)
这是arithmetic shift这就是为什么要保留这个标志,要logical shift使用>>>
0x80000000 >>> 1 // returns 1073741824 (0x40000000)
答案 1 :(得分:3)
在Javascript中,>>
是签名右移运算符。在language specification的§11.7.2中,它说:
对左操作数执行符号填充按位右移操作,操作数由右操作数指定。
在移位完成之前,左操作数被转换为带符号的32位整数(规范中给出的算法的第5步)。在您的情况下,此转换将给定的正数转换为负值。之后,实际转移完成,保留值的负号。