8 c++ operators bitwise-operators
最近我在看一些人的C++项目并试图找出他项目的一些工作原理.我对使用按位AND赋值运算符有点不清楚.
我不能问他,所以我想也许有人可以帮我...
有一个" unsigned int X = 0; "变量,它在while循环中总是增加"1".
while (...)
{
... some code ...
X++;
X &= (1024 - 1);
}
Run Code Online (Sandbox Code Playgroud)
我真的不明白" &= "的使用,这种用途的目的是什么?
谢谢.
Dan*_*Dan 14
它们&=和它们++在一起是相同的,X = (X + 1) % 1024;但CPU可以更快地计算出来.
1024-1是11 1111 1111二进制的,所以对于数字,其中X < 1024,按位AND将不起作用(因为任何位&1 =相同的位).有趣的事情只有在X≥1024的情况下才会开始发生,所以让我们考虑一下X在1023处开始的循环的迭代.
X++; // X= 100 0000 0000
X &= 1024-1; // & 11 1111 1111
// so, X=0.
Run Code Online (Sandbox Code Playgroud)
然后,在上下文中,正在发生的是X从0增加到1023,然后跳回到0.您可以在以下测试程序中看到这种情况发生的数字要小得多.为了更容易看到,我使用4(不同的2的幂)而不是1024.
#include <iostream>
int main () {
unsigned int x = 0;
for (int ii = 0; ii < 10; ++ii) {
x++;
x &= (4-1);
std::cout << "loop iteration #" << ii << ": x=" << x << std::endl;
}
return 0;
}
/* expected output:
loop iteration #0: x=1
loop iteration #1: x=2
loop iteration #2: x=3
loop iteration #3: x=0
loop iteration #4: x=1
loop iteration #5: x=2
loop iteration #6: x=3
loop iteration #7: x=0
loop iteration #8: x=1
loop iteration #9: x=2
*/
Run Code Online (Sandbox Code Playgroud)
ben*_*ous 12
1024 - 1是1023,二进制是1111111111
X &= Y意思X = X & Y;
所以这转化为 X = X & (binary) 1111111111
这将掩盖除了十个最低位之外的所有内容.
这将使X环绕从0到1023(但不同于将X重置为零,因为它将处理任何溢出)
| 归档时间: |
|
| 查看次数: |
5882 次 |
| 最近记录: |