标签:
左移
无论被移动的数是有符号还是无符号,左移一位相当于乘2(在不溢出的情形下)
右移
对于无符号数,右移一位相当于除以2;
对于有符号数,如果还想获得同样右移除以2的效果,就要考虑算数右移,即符号位始终不变,所有位(包括符号位)都向右移动一位,这样造成的结果就是,整数通过算数右移,最终都会等于0(所有bit都是0),负数通过算数右移,最终都会等于-1(所有bit都是1)。
-1算数右移一位还是-1
-1算数右移一位结果还是-1,即-1 / 2商还是-1而不是0。初看违反直觉,但是这是符合除法的定义的。数论中对于除法定义如下:
如果a和b都是整数,并且b != 0,那么有且只有唯一的整数对q和r,满足
a = qb + r, 其中0 <= r < |b|
根据除法定义, -1 / 2,q = -1, r = 0,满足上面的条件
标签:
原文地址:http://www.cnblogs.com/chaoguo1234/p/5414554.html