【Java SE17 Silver 模擬試験】A-49

Java SE17 Silver 模擬試験
Java SE17 Silver 模擬試験

問題

次のコードをコンパイル、実行するとどうなりますか。

public class Main {
	public static void main(String... args) {
		var n  = 0b0101;
		var m = 0b0110;
		int[] nums = { n, m, m & n, m | n };
		for (int i : nums)
			System.out.print(" " + i + " ");
	}
}

選択肢

A)5 6 0 1 が出力される

B)5 6 0 1 が出力される

C)5 6 12 7 が出力される

D)コンパイルエラーになる

E)NumberFormatException がスローされる

F)5 6 4 7 が出力される

G)5 6 7 4 が出力される

H)5 6 15 4 が出力される

解答

A)5 6 0 1 が出力される

B)5 6 0 1 が出力される

C)5 6 12 7 が出力される

D)コンパイルエラーになる

E)NumberFormatException がスローされる

F)5 6 4 7 が出力される

G)5 6 7 4 が出力される

H)5 6 15 4 が出力される

解説

ビット演算子による論理積( & )と論理和( | )の問題です。

m & n の場合
&は、比較されている2進数のビット値の桁数の数字が同じならば1、異なれば0を返します。
以下のビット演算では、数字が同じならばマーカ赤色
異なればマーカー青色にわかりやすいように着色しています。

var n  = 0b0101;           //5
var m = 0b0110;          //6
-----------------------
              0b0100        //この2進数は「 4 」を意味する

m | n の場合
| は、2進数のビット値の桁数の数字を「OR(または)」で確認しています。
以下のビット演算では、以下のとおりで「 | 」で確認しています。

var n  = 0b0101;           //5
var m = 0b0110;          //6

1桁目: n:1 OR m:0 → 1
2桁目: n:0 OR m:1 → 1
3桁目: n:1 OR m:1 → 1
4桁目: n:0 OR m:0 → 0
よって 、以下のとおりとなります。

var n  = 0b0101;           //5
var m = 0b0110;          //6
-----------------------
              0b0111        //この2進数は「 7 」を意味する

前の問題へ SE17_A-48

次の問題へ SE17_A-50


対象資格:Java SE17 認定資格