-6

我刚刚遇到以下代码,我可以看到num每个循环减少一半,但我无法真诚地弄清楚这意味着什么。

int n1 = n;
for (int num = 16; num != 0; num >>= 1)
{
    if ((n1 & num) != 0)
    {
        dOSomeStuff();
    }
}

谢谢。

4

5 回答 5

3

右移赋值运算符:

num >>= 1是相同的num = num >> 1

http://msdn.microsoft.com/en-US/library/23as4533(v=vs.80).aspx

于 2013-06-06T20:39:15.463 回答
1

它的意思是'right-shift-and-assign',与+=意味着 'add-and-assign'、-=意味着 'subtract-and-assign' 等相同。

例如:

int i = 123; // i = 123 binary 01111011
i >>= 1;     // i = 61  binary 00111101
i >>= 1;     // i = 30  binary 00011110
i >>= 1;     // i = 15  binary 00001111
于 2013-06-06T20:39:58.567 回答
0

那将是右移赋值运算符。

http://msdn.microsoft.com/en-US/library/23as4533(v=vs.80).aspx

于 2013-06-06T20:41:08.800 回答
0

这意味着右移 1 并赋值,16 是 10000 二进制,每次调用该代码时,该数字基本上都会除以 2。10000(16)变为 01000(8)

于 2013-06-06T20:41:44.240 回答
0

将值向右移位的是运算符。在您的代码中, num 将具有以下序列:

16 //10000 二进制

8 //01000

4 //00100

2 //00010

1 //00001

于 2013-06-06T20:44:10.553 回答