0

私の知る限り、参照は整数の個々のビットを参照できないため、これが可能かどうかはわかりませんが、次の効果を可能にする手法があるかどうか知りたいです。

int z = 0x1234;
z[0] = 1; //set the most significant bit of z.
uint8_t bit = z[30] //get the index 30 bit of z, counting from the left.

が持てない場合z[0] = 1、少なくともオーバーロード操作を使用してビットを抽出できるかどうか疑問に思います。

4

3 に答える 3

5

直接ではありません。ラッパーを書き込むかintstd::bitset.

于 2013-02-26T09:33:01.670 に答える
2

組み込み型の演算子をオーバーロードすることはできません。オーバーロードされた演算子には、少なくとも 1 つのユーザー定義型 (つまり、クラスまたは共用体型) を含める必要があります。

于 2013-02-26T09:32:18.510 に答える
0

ラップする場合はint、次のようにすることができます。

class bitval {
    int &val;
    unsigned int mask;
  public:
    bitval(int &i, int idx) : val(i), mask(((unsigned int)(INT_MAX) + 1) >> idx) {}
    bitval &operator=(int i)  {
        if (i) {
            val |= mask;
        } else {
            val &= ~mask;
        }
        return *this;
    }
    operator bool() const {
        return val & mask;
    }
};

class bit {
    int &val;
  public:
    bit(int &i) : val(i) {}
    bitval operator[](int idx) { return bitval(val, idx); }
};

次に、構文は次のようになります。

int z = 0x1234;
bit(z)[0] = 1;
uint8_t b = bit(z)[30];

ところで、C++ プログラマーは通常、上位ビットではなく、最下位ビットをビット 0 と呼ぶため、混乱が少なくなる可能性があります。mask(1 << idx)

于 2013-02-26T11:29:55.503 に答える