如何取消整数中特定位的设置
本文关键字:定位 设置 整数 何取消 取消 | 更新日期: 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));