这个“>> =”运算符在C中意味着什么?

时间:2013-07-21 07:11:53

标签: c

unsigned long set;
/*set is after modified*/
set >>= 1;

我在内核系统调用中发现了这个,但我不明白,它是如何工作的?

5 个答案:

答案 0 :(得分:24)

表达式set >>= 1;表示set = set >> 1;set的右移位1>>按位右移运算符检查{set 3}})。

假设BIT NUMBER 31 n=27 m=17 0 ▼ ▼ ▼ ▼ set = 0000 1111 1111 1110 0000 0000 0000 0000 是:

set >> = 1;

然后set变量BIT NUMBER 31 n=26 m=16 0 ▼ ▼ ▼ ▼ set = 0000 0111 1111 1111 0000 0000 0000 0000 变为:

set

注意位数已移位。

请注意一个有趣的观点:由于unsigned long>>,因此int main(){ unsigned long set = 268304384UL; set >>= 1; printf(" set :%lu \n", set); set = 268304384UL; set /= 2; printf(" set :%lu \n", set); return 1; } 操作应为Bitwise Shift Operatorslogical shift)逻辑移位不会保留数字标志位。

此外,因为您将所有位向右移动(向较低有效数字移动)所以右移是=将数字除以2。

unsigned shift(只是为了证明最后一点):

 set :134152192 
 set :134152192

输出:

>>

(注意:它不代表/<<=都相同)

同样,您有左移的运营商{{1}},请检查其他可用的check this codeBitwise operators,同时查看以下部分:Compound assignment operators以及:bit expressions之间的差异。

答案 1 :(得分:9)

这个“右移”的值是一位。如果将整数的所有位向右移动1,则有效地“除以2”,因为二进制是基数为2的编号系统。

想象一下你的二进制数为12:

1100 = 12 in binary
 110 =  6 in binary (1100 right-shifted)

就像你将一个基数为10的数字中的所有数字一个一个地移动一样,你将除以10。

答案 2 :(得分:4)

这将位向右移位1,相当于除以2.有关位移的更多信息,请参阅http://msdn.microsoft.com/en-us/library/f96c63ed(v=vs.80).aspx

答案 3 :(得分:3)

每个二元运算符都可以与=结合使用。在所有情况下

dest op= expression

相当于

dest = dest op expression

(除非dest有任何副作用,否则只会发生一次)。

所以这意味着

set>>=1;

相当于:

set = set >> 1;

由于>>是二元右移运算符,它意味着将set中的值右移1位。

答案 4 :(得分:1)

上面的命令执行右移一位。在此链接中查看c中的位操作http://www.cprogramming.com/tutorial/bitwise_operators.html