[PR]

論理右シフト代入演算子(>>>=)使用上の注意

戻る

 byte 型や short 型の変数に対して論理右シフト代入演算子 >>>= を使用する場合は注意が必要である。

 Java は数値演算を最低でも 32 bit 整数精度で行う。
 そのため byte 型や short 型の変数も数値演算の途中では 32 bit 整数精度で表現されることになる。
 下記の例1.で言えば、論理右シフトされる byte 型変数 b の値 -1 は、数値演算の途中では 8 bit 精度の 11111111b としてではなく 32 bit 精度の 11111111111111111111111111111111b として扱われる。
 当然、この値を右に 7 シフトした場合の結果は 00000001111111111111111111111111b であり 00000001b ではない。
 故に、最終的に byte 型変数 b に代入される演算結果は 32 bit の 00000001111111111111111111111111b を 8 bit に丸めた 11111111b、すなわち値 -1 である。
 この現象は論理右シフト演算子 >>> を使用した場合にも起こる。

例1.

	public class tip00000_1
	{
		public static void main( String args[] )
		{
			byte b = -1; // 11111111b
			b >>>= 7;
			System.out.println( b );
		}
	}

実行結果

	-1

関連

右シフト演算子(>>)使用上の注意 - C/C++


Google
ご意見・ご感想をお聞かせ下さい。匿名で送信できます。

 * 返信が必要な場合には postmaster@katsura-kotonoha.sakura.ne.jp へ直接メールしてください。

水無瀬 優 postmaster@katsura-kotonoha.sakura.ne.jp

あなたの作った歌をソフトウェアが人間の声で歌う! これぞ近未来のソフトウェア!
これを流行の一言ですませてはいけない! 技術的にもコンセプト的にも凄い!