如何集体检查位是否设置在无符号整数中
How to collectively check whether bits are set in an unsigned integer?
给定一个无符号整数,我想知道是否有一种方法可以确定是否在一次操作中设置了多个位。已经有一种替代方法可以通过逐点检查来实现这一点(如下所示),但我想知道是否有一种方法可以集体检查所有的位。
typedef enum Foo_X
{
Foo_0 = 0x1,
Foo_1 = 0x2,
Foo_2 = 0x4,
Foo_3 = 0x8,
} Foo_X;
bool CheckFoo ( UINT Value, Foo_X Foo_to_Check )
{
if (Value & Foo_to_Check)
{
// Foo_to_Check is present
return true;
}
}
void main()
{
UINT value = GetValueFromSomewhere();
if (CheckFoo(value, Foo_0) && CheckFoo(value, Foo_3))
// both Foo_0 and Foo_3 are present
else
// not both present
}
下面也显示了使用集体方法的示例。有什么想法吗?TIA!
bool CheckFooTogether ( UINT Value, UINT Foos_to_Check )
{
// check value against Foos_to_Check collectively
}
void main()
{
UINT value = GetValueFromSomewhere();
if (CheckFooTogether (value, Foo_0 | Foo_3))
// both Foo_0 and Foo_3 are present
else
// not both present
}
(Value&Foos_to_Check)==Foos_to_Check
(value & (FOO_0 | FOO_3)) == (FOO_0 | FOO_3)
当FOO_0
和FOO_3
都被设置时返回true
。
您可以通过简单的逐位and
检查来实现这一点:
bool CheckFooTogether ( UINT Value, UINT Foos_to_Check )
{
// check value against Foos_to_Check collectively
if( (Value & Foos_to_Check) == Foos_to_Check)
return true;
else
return false;
}
int main()
{
UINT value = Foo_3 | Foo_2;
if (CheckFooTogether (value, Foo_0 | Foo_3))
// both Foo_0 and Foo_3 are present
cout << "both present";
else
// not both present
cout << "not both present";
}
示例
相关文章:
- 如何打印boost多精度128位无符号整数
- C++模板函数,用于比较任何无符号整数和有符号整数
- 在线程中读取无符号整数时,c++ 位是否以原子方式切换?
- Constexpr 可变参数模板,用于对无符号整数进行重新排序
- 为什么 Clang 和 GCC 中两个无符号整数之和的结果类型不同
- 从 std::string 转换为 const 无符号整数
- 迭代器和无符号整数的重载 + 运算符
- C++,概念不适用于无符号整数作为结果类型?
- 在C++中,将无符号整数转换为八进制表示,反之亦然的最佳方法是什么
- 原子式清除无符号整数的最低非零位
- 计算机使用什么方法添加无符号整数
- boost::任何带有结构体和无符号整数
- 添加有符号和无符号整数
- 如何安全地比较两个无符号整数计数器?
- 计算 (64 位无符号整数) * (64 位无符号整数) 的商除以 2^64
- 如何将 32 位无符号整数分配给包含 32 位的位字段
- 如何将以"\0"开头的字符 * 转换为无符号整数?
- *(易失性无符号整数 *) 的含义 0x00 = 0x00;
- 最快的函数将位置设置为一个无符号整数中两个位之间的位
- 如何集体检查位是否设置在无符号整数中