搜索值C+中的设置/未设置位组合+; 这是我第一次使用C++,我正在尝试确定一个给定的int的比特是否属于一个特定的类别:

搜索值C+中的设置/未设置位组合+; 这是我第一次使用C++,我正在尝试确定一个给定的int的比特是否属于一个特定的类别:,c++,bit,C++,Bit,对于传递给函数的每个int,我们实现一个规则,即每2位表示消息中的一个奇异值,如果该消息的值是2(10二进制),那么我们需要返回一个带false的布尔值。示例:(在列二进制表示法中,我将每个2位分开,使其更可见) 给定值 二进制表示 条件满足 退换商品 0 00 00 00 00 没有一个 真(不满足任何条件) 128 1000 第一 假的 32 (00)1000 第二 假的 8. (00 00)1000 第三 假的 2. (00)10 第四 假的 217 11 011001 第三 假的 153

对于传递给函数的每个int,我们实现一个规则,即每2位表示消息中的一个奇异值,如果该消息的值是2(10二进制),那么我们需要返回一个带false的布尔值。示例:(在列二进制表示法中,我将每个2位分开,使其更可见)

给定值 二进制表示 条件满足 退换商品 0 00 00 00 00 没有一个 真(不满足任何条件) 128 1000 第一 假的 32 (00)1000 第二 假的 8. (00 00)1000 第三 假的 2. (00)10 第四 假的 217 11 011001 第三 假的 153 10011001 第一和第三 假的
这将计算一个数字,该数字为每条消息设置了一个位,即2。例如,如果
value=0b11011001
value&0xaaaaaaaa
0b10001000
,则向右移动产生
0b0101000000
~value
0b11111111111111111100110
,并与
0x5555555555
一起产生
0b01010101010101010101010000100
,最后,产生<代码> 0b100< /COD>,显示条件3满足。

< P>,C++中,int为符号INT短路,通常由4字节或32位表示。因此,您的函数只能处理输入整数的最后8位


第二,1自C++14以来,您可以使用二进制表示法以可理解的方式编写函数:

bool isConditionVoid(std::uint8_t value) {
    bool Condition1 = ((value & 0b00'00'00'11) == 0b00'00'00'10);
    bool Condition2 = ((value & 0b00'00'11'00) == 0b00'00'10'00);
    bool Condition3 = ((value & 0b00'11'00'00) == 0b00'10'00'00);
    bool Condition4 = ((value & 0b11'00'00'00) == 0b10'00'00'00);

    return !Condition1 && !Condition2 && !Condition3 && !Condition4;
}

你查过
1@ThomasSablik对不起,你什么意思?也许我不应该使用运算符,因为运算符是正确的,但位置是错误的。
1
(value>>1&~value)&0x555555
保存操作。尽管
应首先转换为
无符号整数
,除非已知其为非负。
1<<8 means (01) 00 00 00 00
1<<7 means      10 00 00 00
bool isConditionVoid(std::uint8_t value) {
    bool Condition1 = ((value & 0b00'00'00'11) == 0b00'00'00'10);
    bool Condition2 = ((value & 0b00'00'11'00) == 0b00'00'10'00);
    bool Condition3 = ((value & 0b00'11'00'00) == 0b00'10'00'00);
    bool Condition4 = ((value & 0b11'00'00'00) == 0b10'00'00'00);

    return !Condition1 && !Condition2 && !Condition3 && !Condition4;
}