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

本文关键字:定位 设置 整数 何取消 取消 | 更新日期: 2023-09-27 18:18:09

假设我有一个像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开始)

清除或取消位

使用与运算符(&)清除一个位。

 number &= ~(1 << x); 

将清除位x。您必须使用按位NOT操作符(~)反转位字符串,然后使用AND。

注意:这里x是从0到LSB开始的位的位置

可以切换第n位

result = number ^ (1 <<bitIndex)

如果您正在处理文字,那么您可以只使用十六进制数字。将您的位模式转换为十六进制数字:

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) );
}

在C和c++中使用位与运算符来形成与掩码:

10101 & 10001

按位函数

Java:

int num = 0b10101;
int mask = 1 << bitPosition;
System.out.println(Integer.toBinaryString(num));
num &= ~mask;
System.out.println(Integer.toBinaryString(num));