我不明白这种方法zz =>> 1

时间:2013-12-11 03:20:50

标签: c++ int unsigned

这是我的代码:

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者除外; 请解释。 谢谢

2 个答案:

答案 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。

这种向右移动很容易,搜索网络向左移动,在签名值的情况下更复杂