1

では、32 ビット整数から始めましょう。

int big = 536855551; // 00011111111111111100001111111111

ここで、最後の 10 ビットをこの整数内に設定したいと思います。

int little = 69; // 0001101001

だから、私のアプローチはこれでした:

big = (big & 4294966272) & (little)

4294966272最初の 22 ビット、または11111111111111111111110000000000です。

ただし、 は の範囲4294966272外であるため、もちろんこれはサポートされていません。また、これは私の唯一の操作ではありません。また、ビット 11 から 14 を設定できるようにする必要があります。そのための私のアプローチ (同じ問題) は次のとおりです。int0x7FFFFFFF

big = (big & 4294951935) | (little << 10)

説明が邪魔にならないので、上記の代替として私がやっていることは次のとおりです。

1: ((big >> 10) << 10) | (little)
2: (big & 1023) | ((big >> 14) << 14) | (little << 10)

私の代替案が最善で効率的な方法だとは思えません。これを行うためのより良い方法はありますか?

補足: C# がバイナリ リテラルをサポートしている場合'0b'、これはもっときれいになります。

ありがとう。

4

2 に答える 2