如何在不影响值的其余部分的情况下将最低有效位更改为0,例如:0xffffffff
,例如在C或Python中?我不是一个数学天才,所以对我而言,找到如何实现这一目标很麻烦。
n = 0 // clear this bit
0xffffffff &= ~(1U << n) = 0xfffffffe
答案 0 :(得分:2)
尝试此操作以清除最低有效位:
int x = 0xffffffff;
...
/* clear least significant bit */
x &= ~1;
设置LSB
int x = 0xffffffff;
...
/* set least significant bit */
x |= 1;
更改LSB
int x = 0xffffffff;
...
/* change least significant bit */
x ^= 1;
如果您想扩展/设置/清除/更改位n
,请将1
更改为(1U<<n)
。
答案 1 :(得分:1)
unsigned x = (x>>1U)
x = (x<<1U)
这很容易理解....
例如:
设x = 10010101011
第1步:x = 0 1001010101 // x&gt;&gt; 1
第2步:x = 1001010101 0 // x&lt;&lt; 1
比较:
10010101011
10010101010
另一种方法可以是无符号x = x & 0Xfffffffe
,它等于11111111111111111111111111111110
,即31位1,以便将位31保持为1,因为它在x中出现。
希望这有帮助!
答案 2 :(得分:1)
使用按位NOT
运算符~0
计算设置为1
的所有位。将此值分配给unsigned int
变量并将其向左移1位,以使除最低有效位之外的所有位均为1
。在AND
上使用按位&
运算符x
来切换最低有效位。
unsigned int x = 0xffffffff;
unsigned int y = 0;
x = x & (~0 << 1);
答案 3 :(得分:0)
如果您不想深入了解位操作,请执行i = (i / 2) * 2;
。这将清除第0位(为什么?)。