| 情報学部 | 菅沼ホーム | 全体目次 | 演習解答例 | 付録 | 索引 |

> より大きい 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;
| 情報学部 | 菅沼ホーム | 全体目次 | 演習解答例 | 付録 | 索引 |