では、32 ビット整数から始めましょう。
int big = 536855551; // 00011111111111111100001111111111
ここで、最後の 10 ビットをこの整数内に設定したいと思います。
int little = 69; // 0001101001
だから、私のアプローチはこれでした:
big = (big & 4294966272) & (little)
は4294966272
最初の 22 ビット、または11111111111111111111110000000000
です。
ただし、 は の範囲4294966272
外であるため、もちろんこれはサポートされていません。また、これは私の唯一の操作ではありません。また、ビット 11 から 14 を設定できるようにする必要があります。そのための私のアプローチ (同じ問題) は次のとおりです。int
0x7FFFFFFF
big = (big & 4294951935) | (little << 10)
説明が邪魔にならないので、上記の代替として私がやっていることは次のとおりです。
1: ((big >> 10) << 10) | (little)
2: (big & 1023) | ((big >> 14) << 14) | (little << 10)
私の代替案が最善で効率的な方法だとは思えません。これを行うためのより良い方法はありますか?
補足: C# がバイナリ リテラルをサポートしている場合'0b'
、これはもっときれいになります。
ありがとう。