如何取消设置整数中的特定位

说,我有一个像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));