左移右移运算右移相当于是除,左移相当于就是乘,左移一位乘以2,左移二位乘以4,依此类推.无论正数、负数,它们的右移、左移、无符号右移32位都是其本身,比如-532=-5、-5>>>32=-5如:-5>>3=-1 -53=0 5>3=536870911请问这里-5>>3相当于-5/8=-0.625然后约等于-1?5>>3相当于5/8=0.625然后约等于0?就是说用除法得到的负的小数与正的小数约等于后的值都是靠近0的值?另外,-5>>>3=536870911怎么得到的?谢谢!

问题描述:

左移右移运算
右移相当于是除,左移相当于就是乘,左移一位乘以2,左移二位乘以4,依此类推.无论正数、负数,它们的右移、左移、无符号右移32位都是其本身,比如-532=-5、-5>>>32=-5
如:-5>>3=-1
-53=0
5>3=536870911
请问这里-5>>3相当于-5/8=-0.625然后约等于-1?
5>>3相当于5/8=0.625然后约等于0?就是说用除法得到的负的小数与正的小数约等于后的值都是靠近0的值?
另外,-5>>>3=536870911怎么得到的?谢谢!

>>右移时,空出来的高位用1还是0补上是由计算机系统决定的,不过从你给的题目可看出,是由要位移的数的高位决定的,如果高位为1则用1补,高位为0则用0补,
-5用十六进制表示就是0xffff fffb,右移3位,高位空出来的3位用1补,就是0xffffffff,即-1
5用十六进制表示就是0x00000005,右移3位,高位空出来的3为用0补,就是0x00000000,即0
>>>是无符号右移运算符,即空出来的位用0补,所以
-5>>>3即0xfffffffb>>>3 得到的十六进制数为0x1fffffff 也就是536870911