情報学部 | 菅沼ホーム | 全体目次 | 演習解答例 | 付録 | 索引 |
> より大きい a > b 式 a の値が式 b の値より大きいとき真 < より小さい a < b 式 a の値が式 b の値より小さいとき真 >= 以上 a >= b 式 a の値が式 b の値以上のとき真 <= 以下 a <= b 式 a の値が式 b の値以下のとき真
== 等しい a == b 式 a の値と式 b の値が等しいとき真 != 等しくない a != b 式 a の値と式 b の値が等しくないとき真
|| 論理和 x || y 式 x が真か,または,式 y が真のとき真 && 論理積 x && y 式 x が真で,かつ,式 y が真のとき真 ! 否定 ! x 式 x が偽のとき真
0 < x < 5
(0 < x) && (x < 5)
01 /****************************/ 02 /* 関係式と論理式 */ 03 /* coded by Y.Suganuma */ 04 /****************************/ 05 import java.io.*; 06 07 public class Test { 08 public static void main(String args[]) 09 { 10 BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); 11 12 try { 13 /* 14 データの入力 15 */ 16 int a = 10, b = 20; 17 System.out.println("a = " + a + " b = " + b); 18 System.out.print("整数データを1つ入力して下さい "); 19 int x = Integer.parseInt(in.readLine()); 20 /* 21 出力 22 */ 23 // System.out.println("a < -1 < b ? " + (a < -1 < b)); 24 System.out.println("a < x < b ? " + ((a < x) && (x < b))); 25 System.out.println("x < a or x > b ? " + ((x < a) || (x > b))); 26 // System.out.println("~(a + b + x) ? " + (!(a + b + x))); 許されません 27 System.out.println("a = b ? " + (a == b)); 28 System.out.println("a ≠ b ? " + (a != b)); 29 } 30 catch (IOException ignored) {} 31 } 32 }
a < x < b ? true x < a or x > b ? false a = b ? false a ≠ b ? true
| 論理和 x | y 対応するビットのいずれかが 1 のとき 1,そうでないときは 0 & 論理積 x & y 対応するビットの双方が 1 のとき 1,そうでないときは 0 ^ 排他的論理和 x ^ y 対応するビットが異なるのとき 1,そうでないときは 0 ~ 1の補数 ~ x ビット毎に 1 と 0 を反転する
<< 左にシフト x << 3 3 ビット左にシフト.x を 23 倍することに相当. >> 右にシフト x >> 3 3 ビット右にシフト.x を 23 で割ることに相当. >>> 右にシフト x >> 3 3 ビット右にシフト(空いた場所に 0 を補充)
11111001 → 3 ビット左にシフト → 11001000
(1)>> 11001111 → 3 ビット右にシフト → 11111001 (2)>>> 11001111 → 3 ビット右にシフト → 00011001
/******************************/ /* ビット演算子とシフト演算子 */ /* coded by Y.Suganuma */ /******************************/ import java.io.*; public class Test { public static void main(String args[]) { /* ビット演算子 */ int x1 = 0x00000031, x2 = 0xfffffff2; int y1 = x1 & 0x0000000f; // 下位4ビットの取り出し int y2 = x2 & 0x0000000f; // 下位4ビットの取り出し int z1 = y1 ^ y2; // 排他的論理和(和になっている) int z2 = ~z1 + 1; // -3 に対する2の補数表現 System.out.println("ビット演算子"); System.out.println(" y1 " + Integer.toHexString(y1) + "(" + y1 + ") y2 " + Integer.toHexString(y2) + "(" + y2 + ")"); System.out.println(" z1 " + Integer.toHexString(z1) + "(" + z1 + ") z2 " + Integer.toHexString(z2) + "(" + z2 + ")"); /* シフト演算子 */ int a = -3, b = 3; y1 = a << 3; // 左に3ビットシフト(負) y2 = b << 3; // 左に3ビットシフト(正) System.out.println("シフト演算子"); System.out.println(" y1 " + Integer.toHexString(y1) + "(" + y1 + ") y2 " + Integer.toHexString(y2) + "(" + y2 + ")"); y2 = y1; // -24 y1 = y1 >> 3; // 右に3ビットシフト(1/8倍) y2 = y2 >>> 3; // 右に3ビットシフト(1/8倍,0をつめる) System.out.println(" y1 " + Integer.toHexString(y1) + "(" + y1 + ") y2 " + Integer.toHexString(y2) + "(" + y2 + ")"); } }
ビット演算子 y1 1(1) y2 2(2) z1 3(3) z2 fffffffd(-3) シフト演算子 y1 ffffffe8(-24) y2 18(24) y1 fffffffd(-3) y2 1ffffffd(536870909)
<<= x <<= 3 x を 3 ビット左にシフトして,その結果を x に代入 >>= x >>= 3 x を 3 ビット右にシフトして,その結果を x に代入 >>>= x >>>= 3 x を 3 ビット右にシフトして,その結果を x に代入(符号ビット無視,C/C++ には無い) &= x &= y x と y のビット毎の論理積を計算し,その結果を x に代入 |= x |= y x と y のビット毎の論理和を計算し,その結果を x に代入 ^= x ^= y x と y のビット毎の排他的論理和を計算し,その結果を x に代入
式1 ? 式2 : 式3
x = (y > 5) ? 10 : 20;
情報学部 | 菅沼ホーム | 全体目次 | 演習解答例 | 付録 | 索引 |