在阅读'C'代码时,我遇到了这行代码
b>>=1;
任何人都可以澄清这是什么意思吗?
答案 0 :(得分:4)
此表达式基于运算符>> =称为复合赋值运算符
b>>=1;
相当于
b = b >> 1;
b>> 1向右移动存储在b中的值,前提是运算符不是iser定义的运算符。 例如,如果b具有以下内部表示(假设b具有类型unsigned char)
00001111
然后b>> 1结果
00000111
b应具有整数类型。如果b为负数,则结果为实现定义。 正如我已经提到的,您可以为用户定义的类型重载此运算符。
实际上,表达式b >> 1
等同于b / 2
正如您可以看到上面的示例,原始值00001111
在十进制表示法中等于15,而结果值{{1}在十进制表示法中等于7。您可以使用表达式00000111
因此
b / 2
也可以写成
b >>= 1;
答案 1 :(得分:2)
向右移位b
一位,然后将结果分配回b
。
答案 2 :(得分:2)
>>=
是复合作业运算符。
对于复合赋值运算符,
E1 op= E2
相当于
E1 = E1 op (E2)
所以b >>= 1
相当于b = b >> 1
。
答案 3 :(得分:0)
b>>=1
是Compound assignment Operator
它扩展为 -
b = b >> 1;
这意味着您正确地将b
移位一次,并将结果存储在b
中。
右移只是除以2. b = b >> 1
等于b = b/2
答案 4 :(得分:0)
这是右移位运算符,意思是b = b >> 1;