Cでいくつかのビット演算の練習を見たことがありますが、理解できないものが1つあります。特定の整数「x」でn番目のバイトとm番目のバイトを交換するには、ビット操作を使用する必要があり、nとmは次のようになります。両方とも<=3。解決策は、x >> (n<<3)からx >> (m<<3)のXORに基づいて、結果の数値の最後の8ビットをマスクすることです。しかし、私が理解していないのはm / n右に3ビット。
答え1
n
ifは一言で言えば場所なのでバイト単位であれば、8*n
同じ場所ですビット単位で。 (2 3n<<3
= 8) と同じです.8*n
を使用すると、n=1
2番目に低いバイトが一番下の位置に移動し、残りの単語がマスクされます。 (もちろんバイトは0から始まり番号が付けられます。)n<<3
8
(x >> (n << 3)) & 0xff
(私はバイトが8ビットであると仮定します。なぜなら、少なくとも今はこれが最も一般的なケースだと思うからです)。