2015年12月4日星期五

关于移位操作

在计算机中,正数是用原码表示的,负数是用补码表示的。第一位是符号位,0表示正,1表示负。
举个例子,-1在计算机中的表示为1111 1111 1111 1111 1111 1111 1111 1111,由1的反码再加1得到的。

移位操作:左移<< 右移>> 无符号右移>>>
左移无论对于正数还是负数都是乘以2的次幂。

这里主要谈右移:
正数的右移左边补0,所以是简单的除以2的次幂。
负数的右移左边补1,举例:
-1:无论右移多少都是全1,所以-1右移多少位还是-1
-5>>1:1111 1111 1111 1111 1111 1111 1111 1011,右移1位变成1111 1111 1111 1111 1111 1111 1111 1101,所以-5右移1位是-3

无符号右移:无论负数还是正数前面都补0,所以无符号右移的结果一定不会是负数。

没有评论:

发表评论