将bool转换为位序列

Translate bools to bit sequence

本文关键字:bool 转换      更新时间:2023-10-16

寻找一些操作符(我猜在+的地方?),将做

unsigned char bits = true + false + true + true + true;  // 1 byte is sufficient

变成如下位模式:

00010111

那么如何检查if

中的位模式呢?
if (bits == 00010111)

你想要

bits = true << 5 | false << 4 | true << 3 | true << 2 | true << 1;

bits |= true;
bits <<= 1;
bits |= false;
bits <<= 1;
bits |= true;
bits <<= 1;
bits |= true;
bits <<= 1;
bits |= true;

可以使用std::bitset的字符串构造函数

#include <bitset>
#include <string>
#include <iostream>
int main() {
    std::string bits;
    bits.push_back('1');
    bits.push_back('0');
    bits.push_back('1');
    bits.push_back('1');
    bits.push_back('1');
    std::bitset<8> bitset(bits);
    std::cout << bitset.to_string();
}

有更好的方法。

为什么不用bitset呢?有一种方法可以设置各种位并将其转换为unsigned long。只需对其执行&运算符即可获得字节

操作符+需要对当前值左移一位,然后对输入的true或false进行"按位或"运算,并返回该值

这是我想到的一个快速实现:

#include <iostream>
class Foo
{
    int result;
public:
    Foo() : result(0) {}
    Foo(bool value) : result(value ? 1 : 0) {}
    explicit Foo(int value) : result(value) {}
    Foo operator+(bool value) const
    {
        std::cout << "adding " << value << std::endl;
        return Foo((result << 1) | (value ? 1 : 0));
    }
    int get_result() const { return result; }
};
int main()
{
    Foo x;
    x = Foo(true) + false + true;
    std::cout << x.get_result() << std::endl;
}

在这里试试