我刚刚遇到以下代码,我可以看到num
每个循环减少一半,但我无法真诚地弄清楚这意味着什么。
int n1 = n;
for (int num = 16; num != 0; num >>= 1)
{
if ((n1 & num) != 0)
{
dOSomeStuff();
}
}
谢谢。
它的意思是'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
这意味着右移 1 并赋值,16 是 10000 二进制,每次调用该代码时,该数字基本上都会除以 2。10000(16)变为 01000(8)
将值向右移位的是运算符。在您的代码中, num 将具有以下序列:
16 //10000 二进制
8 //01000
4 //00100
2 //00010
1 //00001