2011-01-02 3 views
1

これは実際にはGoogleにとってかなり難しいことです。クイック:intの上位2ビットを設定する

32ビット整数の上位2ビットをどのように(ビット単位またはビット単位に)設定しますか?

私が試したすべてのものからコンパイラの警告が表示されています。

答えて

6

これを試してみてください:

integerVariable |= 3 << 30; 

使用することがより明確にすること(1 < < 31)| (1 < < 30)の代わりに(3 < < 30)、または動作に関するコメントを追加することができます。どちらの場合でも、コンパイラは式を単一の値に最適化できなければなりません。これはint.MinValue >> 1 == int.MinValue/2に等しくなります。


それはuintだ場合:

uintVar |= 3u << 30; 
+0

私はそれが好きです。コメントのバージョンはさらに明確です。受け入れられました。 – Flipster

+0

@FlipScript:答えにコメントを移動しました。 –

1
integerVariable |= 0xC0000000; 

使用0xC0000000u符号なし整数の変数のために。

16進数表記で32ビット整数全体がMehrdadの答えのビットシフトよりも私には明らかです。彼らはおそらく、同じことにコンパイルします。だから、あなたにはっきりと見えるものを使用してください。