这是我第一次使用 C++,我正在尝试确定给定 int 的位是否属于特定类别:
对于传递给函数的每个 int,我们实现的规则是每 2 位代表消息中的一个奇异值,如果该消息的值为 2(10 个二进制),那么我们需要返回一个带有 false 的 bool 值。示例:(在二进制表示列中,我将每 2 位分开,以便更明显)
我发现了关于 this和 this并尝试制作一个简单的功能,但它没有按预期工作。
bool isConditionVoid(int value) {
bool Condition1 = (value &(1<<8)) && !(value&(1<<7));
bool Condition2 = (value &(1<<6)) && !(value&(1<<5));
bool Condition3 = (value &(1<<4)) && !(value&(1<<3));
bool Condition4 = (value &(1<<2)) && !(value&(1<<1));
if (!Condition1 || !Condition2 || !Condition3 || !Condition4)
return false;
else
return true;
}
知道哪个条件失败可能是一个优点,但这不是必需的。任何帮助将不胜感激。
最佳答案
unsigned int condition=((value&0xaaaaaaaa)>>1)&((~value)&0x55555555);
这会计算出一个数字,每个消息的位设置为 2。例如,如果 value=0b11011001
,则 value&0xaaaaaaaa
为 0b10001000
,右移生成 0b01000100
~value
为 0b11111111111111111111111100100110
,与 0x55555555
生成 0b0101010101010101010101010000 0100
,最后的 and 产生 0b100
,表明满足条件 3。
关于c++ - 在值 C++ 中搜索设置/取消设置位组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66650918/