2017-12-01 4 views
-1

元のファイルにintとしてレンダリングされた32ビットの数値が与えられました。私は1つの値の右端8ビット(0-7)が必要で、別の右端の8ビット(8-15)が必要です。ビットマスキングとビットシフトを使用してすべてを並べ替えるように言われましたが、整数でどのように動作するのかわかりません。彼らのように下8がそれらの値を保持する一方C++ - ビットマスクを使ってintから値を取得

答えて

1

のみ8つの右端のビットを取得するには、あなたは0でトップ24ビットの論理積であるため、

int right8 = mynum & 0xFF; 

を行うことができ、これらは、0に設定されます。ものと一緒にandedされます。

次の8つの右端を取得するには、ビットマスクでビット8-15を1に設定し、その他のビットを0に設定する必要があります。これは8〜15桁の同じビットを維持しますが、下位8ビットにする必要があるので、右に8桁シフトしてください。あなたは次のことを行うことができます。

int next8 = myNum & 0xFF00; 
int next8 = next8 >> 8; 
+0

ありがとうございました、今すぐお試しください。 – Sig

+0

シフトを正確に家に打つための編集と、マスクの編集をお勧めします。それは、同様の問題ではないが、将来の質問者のために、より多才な答えを作るでしょう。 – user4581301

+0

また、最初に右にシフトして0xFFで結果をマスクすることもできます。 'int next8 =(myNum >> 8)& 0xFF;' –

関連する問題