如何取消设置整数中的特定位
说,我有一个像10101
这样的整数,我想取消第三位得到10001
; 如果我有10001
,我仍然会得到10001
; 我怎么能实现它?
unset(int i, int j) int i= 10101 or 10000 int j = 00100
假设您正在从右侧索引位,这应该可以取消设置value
的特定位:
int mask = 1 << bitIndex; value &= ~mask;
您可以使用类似的代码设置该位:
value |= mask;
mask
和以前一样。 (这假设位索引从0开始。)
清除或取消一点
使用按位AND运算符(&)清除一位。
number &= ~(1 << x);
这将清除位x。 必须使用按位NOT运算符(〜)反转位串,然后运行AND。
注意:这里x是从0到LSB的位的位置。
如果您正在处理litterals,那么您可以使用hex数字。 将位模式转换为hex数:
10101 => 0x15 00100 => 0x04
因此,以下C代码将b
设置为您想要的结果。
int a = 0x15; int b = a & ~( 0x04 );
如果你想要通用的东西你可以有一个C函数(删除所有范围检查)就像
int clearBit( int value, int bit ) { // Assume we count bits starting at 1 return value & ~( 1 << (bit -1) ); }
你可以切换第n位
result = number ^(1 << bitIndex)
在C和C ++中使用位智能运算符来形成AND掩码:
10101 & 10001
按位函数 。
在Java中:
int num = 0b10101; int mask = 1 << bitPosition; System.out.println(Integer.toBinaryString(num)); num &= ~mask; System.out.println(Integer.toBinaryString(num));