x为0x &= ~(1 << N);
Run Code Online (Sandbox Code Playgroud)
工作原理:表达式1 << N 向左移一位N次.对于N = 7,这将是
1000 0000
Run Code Online (Sandbox Code Playgroud)
0111 1111
Run Code Online (Sandbox Code Playgroud)
那么结果是按位与运算用x,赠送:
xxxx xxxx
0111 1111
--------- [AND]
0xxx xxxx
Run Code Online (Sandbox Code Playgroud)
结果:第7位(从LSB开始从零开始计数)关闭,所有其他保留其先前的值.
x为1x |= 1 << N;
Run Code Online (Sandbox Code Playgroud)
它是如何工作的:这次我们采用移位的位和按位或它x,给出:
xxxx xxxx
1000 0000
--------- [OR]
1xxx xxxx
Run Code Online (Sandbox Code Playgroud)
结果:位7打开,所有其他保留其先前的值.
1:如果您不知道哪个是设置为1的最高位,您可以随时查找.有很多方法可以做到这一点; 一个合理的方法是
int x = 0xbf;
int highestSetBit = -1; // assume that to begin with, x is all zeroes
while (x != 0) {
++highestSetBit;
x >>= 1;
}
Run Code Online (Sandbox Code Playgroud)
在循环结束时,highestSetBit将按预期为7.
| 归档时间: |
|
| 查看次数: |
3844 次 |
| 最近记录: |