码迷,mamicode.com
首页 > 其他好文 > 详细

左移与右移

时间:2016-04-20 23:15:01      阅读:205      评论:0      收藏:0      [点我收藏+]

标签:

左移

  无论被移动的数是有符号还是无符号,左移一位相当于乘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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!