这是我的代码:
int main(){
unsigned int z = 18;
z = z>>1;
std::cout << z << std::endl;
}
我知道我的结果将是9但我不明白“z = z&gt;&gt; 1”这一行 它有什么作用?什么&gt;&gt;意思?我以为它只用于cin&lt;&lt; Z者除外; 请解释。 谢谢
答案 0 :(得分:7)
>>
是正确的位移(a),它将值中的所有位右移一个给定值。对于无符号整数,>> 1
实际上是两个整数除以。
二进制值18是:
0001 0010
| |
| +--- 2
+------- 16
--
18
通过一位位置右移(位于右侧的“下降”位和左侧的0
位),为您提供:
0000 1001
| |
| +-- 1
+----- 8
--
9
(a)这是这个特殊情况。 C ++还允许>>
用作类的运算符,例如std::cin >> myInputVar;
,它将尝试从标准输入读取值并将其放入myInputVar
变量。
答案 1 :(得分:1)
向左转移一口z。 例如,你的z是18,即(如果int是2个字节)0000 0000 0001 0010 bynary,当你移动它时,z变为0000 0000 0000 1001 whitch是9.它实际上像两个一样工作。如果您有例如-18的负值,则在第二个补码中为
0000 0000 0001 0010
1111 1111 1110 1101//first complement
1111 1111 1110 1110//second complement
当你移动它时,符号字节被放在顶部
1111 1111 1111 0111
0000 0000 0000 1000//first complement
0000 0000 0000 1001//second complement
女巫是-9。
这种向右移动很容易,搜索网络向左移动,在签名值的情况下更复杂