如何取消整数中特定位的设置
How to unset a specific bit in an integer
假设我有一个像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));
相关文章:
- 为不同配置设置MSVC_RUNTIME_LIBRARY的正确方法是什么
- 在C++/Linux中设置单调时钟的一些技巧
- 如何在选项卡视图Qt中设置一个新项目,并保存以前的项目
- 嵌套在类中时无法设置成员数据
- 需要帮助设置在C++中使用的Potrace
- 如何在自删除后将对象设置为nullptr
- 将指针设置为"nullptr"并不能防止双重删除?
- 如何在Ubuntu中使用cmake设置qt4
- ld:bind_at_load和-bitcode_bundle(Xcode设置ENABLE_bitcode=YES)不能
- 如何在boost beast http请求中设置http头
- 如何解决gcc编译器优化导致的centos双编译器设置中的分段错误
- 如何将这个C++哈希表转换为动态扩展和收缩,而不是使用硬设置的最大值
- 为什么文件名被设置为一个点,而不是在读取矢量中的文件名时
- 如何在24位SDL_Surface上设置像素的颜色
- std::设置自定义比较器
- 如何设置一个范围来提取我想要获得的信息
- 如何在C/C++中用FD_set Unix设置套接字文件描述符
- 设置我的应用程序 API 感知并防止系统使其模糊和错误定位
- 定位包时未设置QT的Cmake Dragndrop框架
- 如何在MFC上设置窗口位置以将其定位到屏幕顶部