c++ - 在值 C++ 中搜索设置/取消设置位组合

标签 c++ bit

这是我第一次使用 C++,我正在尝试确定给定 int 的位是否属于特定类别:

对于传递给函数的每个 int,我们实现的规则是每 2 位代表消息中的一个奇异值,如果该消息的值为 2(10 个二进制),那么我们需要返回一个带有 false 的 bool 值。示例:(在二进制表示列中,我将每 2 位分开,以便更明显)

<表类=“s-表”> <标题> 给定值 二进制表示 满足条件 返回 <正文> 0 00 00 00 00 无 true(不满足条件) 128 10 00 00 00 第一 假 32 (00) 10 00 00 第二 假 8 (00 00) 10 00 第三 假 2 (00 00 00) 10 第四 假 217 11 01 10 01 第三 假 153 10 01 10 01 第一和第三 假

我发现了关于 thisthis并尝试制作一个简单的功能,但它没有按预期工作。

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&0xaaaaaaaa0b10001000 ,右移生成 0b01000100 ~value0b11111111111111111111111100100110,与 0x55555555 生成 0b0101010101010101010101010000 0100 ,最后的 and 产生 0b100,表明满足条件 3。

关于c++ - 在值 C++ 中搜索设置/取消设置位组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66650918/

相关文章:

c++ - 用c++-CIN获取几个整数并将它们放入数组中

java - Integer.toBinaryString() 丢失前导 0

colors - 以 16 位编码 RGB 颜色

C++,用 lambda 实现 typedef?

c++ - unique_ptr - 无效指针和段错误

c++:继承和模板性能权衡

c - 最高有效半字节的十六进制

c++ - 如何以 “Safe ”的方式获取C++中的当前时间

c - 交换未知变量类型的每两位

C# NOT (~) 按位运算符返回负值