1

実行する演算子を探しています( + ? の代わりに推測しています)

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

次のビットパターンになります。

00010111

次に、ifでそのビットパターンを確認するにはどうすればよいですか

if (bits == 00010111)
4

4 に答える 4

6

あなたが欲しい

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;
于 2013-03-03T07:49:13.017 に答える
3

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();

}

ただし、これを行うより良い方法があります。

于 2013-03-03T07:53:04.370 に答える
2

bitsetを使用しない理由。各種ビットを設定し、unsigned long に変換する方法があります。&バイトを取得するには、その上で演算子を実行するだけです。

于 2013-03-03T07:48:52.950 に答える
2

演算子 + は、現在の値を 1 ビット左にシフトしてから、入力された true または false を「ビットごとの OR」して、それを返す必要があります。

これは私が思いついた簡単な実装です:

#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;
}

ここで遊んでみよう

于 2013-03-03T07:56:36.770 に答える