バイト交換の問題(ビット単位演算)

バイト交換の問題(ビット単位演算)

Cでいくつかのビット演算の練習を見たことがありますが、理解できないものが1つあります。特定の整数「x」でn番目のバイトとm番目のバイトを交換するには、ビット操作を使用する必要があり、nとmは次のようになります。両方とも<=3。解決策は、x >> (n<<3)からx >> (m<<3)のXORに基づいて、結果の数値の最後の8ビットをマスクすることです。しかし、私が理解していないのはm / n右に3ビット。

答え1

nifは一言で言えば場所なのでバイト単位であれば、8*n同じ場所ですビット単位で。 (2 3n<<3 = 8) と同じです.8*n

を使用すると、n=12番目に低いバイトが一番下の位置に移動し、残りの単語がマスクされます。 (もちろんバイトは0から始まり番号が付けられます。)n<<38(x >> (n << 3)) & 0xff

(私はバイトが8ビットであると仮定します。なぜなら、少なくとも今はこれが最も一般的なケースだと思うからです)。

関連情報