0

中央の両側の 2 ビットを保持しながら、特定の 8 ビット数値の中央の 4 つの値を交換する方法について考えるのに苦労しています。これが図です:

8 ビットの数値 |76543210| を指定して、2 を 4 に、3 を 5 に交換します。ただし、数字の 7、6、1、および 0 も保持する必要があります。

これは私が現在行っていることの疑似コードです (これは、実際に必要なものよりもはるかに複雑かもしれません。ビット単位の操作は初めてです)

mask1 = 00001100
mask2 = 00110000
temp1 = (original number) AND mask1 // Extract only the bits we care about swapping.
temp2 = (original number) AND mask2
temp1 << 2                          // Perform the swap of the inner four bits.
temp2 >> 2
swapped = temp1 OR temp2            // The final swapped number, but the outer digits
                                    //    haven't been preserved.

シフトが発生した後に外側の数字が確実に復元されるようにするために使用するマスクまたは何かがありますか?

今、私は真ん中の 4 桁をゼロにしてから (元の数字) または交換することを考えていますが、それはハッキーのようです。

これについて助けてくれてありがとう!

4

1 に答える 1

1

temp1 と temp2 の値を割り当てると、(AND 演算子を使用したため) 必要なビットのみが存在します。

しかし、ソリューションに欠けているステップが 1 つあります。元の値とすべてをマージする必要があります。

あなたがする必要があるのは、元の値をコピーしすぎて(それを失いたくない場合)、変更している値を削除し(スワップ)、そこに temp1 と temp2 を OR 演算子で配置することです。

元の値からビットを削除するには? 以下のトリックを使用します。

temp3 = (origianl number) AND ~(mask1 OR mask2)

~は否定です。

于 2013-09-21T18:53:54.183 に答える