首页 百科知识 移位运算符

移位运算符

时间:2023-09-22 百科知识 版权反馈
【摘要】:如果要进行移位的操作数是无符号的,会移入0。这样你就有权假设空位被设置为0。第二个问题的答案同样简单:如果待移位的数长度为n,则移位的数量必须大于等于0并且严格地小于n。因此,在一次单独的操作中不可能将所有的位从变量中移出。注意,即使实现将符号为移入空位,对一个带符号整数的右移运算和除以2的某次幂也不是等价的。为了证明这一点,考虑(-1) >> 1的值,这是不可能为0的。

4.9 移位运算符

    两个原因会令使用移位运算符的人感到烦恼:

 

在右移运算中,空出的位是用0填充还是用符号位填充?

移位的数量允许使用哪些数?

    第一个问题的答案很简单,但有时是实现相关的。如果要进行移位的操作数是无符号的,会移入0。如果操作数是带符号的,则实现有权决定是移入0还是移入符号位。如果在一个右移操作中你很关心空位,那么用unsigned来声明变量。这样你就有权假设空位被设置为0

 

    第二个问题的答案同样简单:如果待移位的数长度为n,则移位的数量必须大于等于0并且严格地小于n。因此,在一次单独的操作中不可能将所有的位从变量中移出。

 

    例如,如果一个int32位,且n是一个int,写n <<31n <<0是合法的,但n<< 32n << -1是不合法的。

 

    注意,即使实现将符号为移入空位,对一个带符号整数的右移运算和除以2的某次幂也不是等价的。为了证明这一点,考虑(-1) >> 1的值,这是不可能为0的。[译注:(-1) / 2的结果是0]


免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈