情報学部 | 菅沼ホーム | 全体目次 | 演習解答例 | 付録 | 索引 |
&value
int *point; // int* point; でも可
point = &value;
point = NULL; // point = 0; でも良い point = nullptr; // C++ の場合
scanf("%d", &a);
char *pc; // char* pc; でも可 double *pd; // double* pd; でも可
data = *point;
*point = 100;
double x, y = 10, *yp = &y; x = *yp;
double x = 100, y; ? *xp; xp = &x; y = *xp;
/**************************************/ /* ポインタを使用した2つのデータの和 */ /* coded by Y.Suganuma */ /**************************************/ #include <stdio.h> int main() { int a = 10; int b = 20; int *ap, *bp; /* アドレスの設定 */ ap = &a; bp = &b; /* アドレスと計算結果の出力 */ printf("和は=%d アドレス(a=%08x b=%08x)\n", *ap+*bp, ap, bp); a++; bp++; printf(" アドレス(a=%08x b=%08x)\n", ap, bp); printf("bpの指す場所(a)に記憶されている値は=%d\n", *bp); return 0; }
和は=30 アドレス(a=00051ca4 b=00051ca0) アドレス(a=00051ca4 b=00051ca4) bpの指す場所(a)に記憶されている値は=11
> より大きい 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)
/****************************/ /* 関係式と論理式 */ /* coded by Y.Suganuma */ /****************************/ #include <stdio.h> int main() { int a = 10; int b = 20; int x; /* データの入力 */ printf("a %d b %d\n", a, b); printf("整数データを1つ入力して下さい "); scanf("%d",&x); /* 様々な関係式と論理式 */ printf("a < -1 < b ? %d\n", a < -1 < b); printf("a < x < b ? %d\n", (a < x) && (x < b)); printf("x < a or x > b ? %d\n", (x < a) || (x > b)); printf("~(a + b + x) ? %d\n", !(a + b + x)); printf("a = b ? %d\n", a == b); printf("a ≠ b ? %d\n", a != b); return 0; }
a < -1 < b ? 1 a < x < b ? 1 x < a or x > b ? 0 ~(a + b + x) ? 0 a = b ? 0 a ≠ b ? 1
---------------------(C++11)関係式と論理式-------------------------
01 /****************************/ 02 /* 関係式と論理式 */ 03 /* coded by Y.Suganuma */ 04 /****************************/ 05 #include <iostream> 06 07 using namespace std; 08 09 int main() 10 { 11 int a = 10; 12 int b = 20; 13 int x; 14 /* 15 データの入力 16 */ 17 cout << "a " << a << " b " << b << endl; 18 cout << "整数データを1つ入力して下さい "; 19 cin >> x; 20 /* 21 様々な関係式と論理式 22 */ 23 cout << boolalpha << "a < -1 < b ? " << (a < -1 < b) << endl; // 警告が出力 24 cout << "a < x < b ? " << ((a < x) and (x < b)) << endl; 25 cout << "x < a or x > b ? " << ((x < a) or (x > b)) << endl; 26 cout << "~(a + b + x) ? " << not(a + b + x) << endl; 27 cout << "a = b ? " << (a == b) << endl; 28 cout << "a ≠ b ? " << (a != b) << endl; 29 30 return 0; 31 }
a 10 b 20 整数データを1つ入力して下さい 15 a < -1 < b ? true a < x < b ? true x < a or x > b ? false ~(a + b + x) ? false a = b ? false a ≠ b ? true
----------------------(C++11)関係式と論理式終わり--------------------
| 論理和 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 で割ることに相当.
11001111 → 3 ビット左にシフト → 01111000
(1)符号付き 11001111 → 3 ビット右にシフト → 11111001 (2)符号なし 11001111 → 3 ビット右にシフト → 00011001
/******************************/ /* ビット演算子とシフト演算子 */ /* coded by Y.Suganuma */ /******************************/ #include <stdio.h> int main() { int x1 = 0x00000031; int x2 = 0xfffffff2; /* ビット演算子 */ int y1 = x1 & 0x0000000f; /* 下位4ビットの取り出し */ int y2 = x2 & 0x0000000f; /* 下位4ビットの取り出し */ int z1 = y1 ^ y2; /* 排他的論理和(和になっている) */ int z2 = ~z1 + 1; /* -3に対する2の補数表現 */ printf("ビット演算子\n"); printf(" y1 %08x(%d) y2 %08x(%d)\n", y1, y1, y2, y2); printf(" z1 %08x(%d) z2 %08x(%d)\n", z1, z1, z2, z2); /* シフト演算子 */ int a = -3; unsigned int b = (unsigned)a; y1 = a << 3; /* 左に3ビットシフト(8倍,符号付き) */ unsigned int w1 = b << 3; /* 左に3ビットシフト(8倍,符号なし) */ printf("シフト演算子\n"); printf(" a %08x(%d) y1 %08x(%d) w1 %08x(%d)\n", a, a, y1, y1, w1, w1); y2 = y1 >> 3; /* 右に3ビットシフト(1/8倍,符号付き) */ unsigned int w2 = w1 >> 3; /* 右に3ビットシフト(1/8倍,符号なし) */ printf(" y2 %08x(%d) w2 %08x(%d)\n", y2, y2, w2, w2); return 0; }
ビット演算子 y1 00000001(1) y2 00000002(2) z1 00000003(3) z2 fffffffd(-3) シフト演算子 a fffffffd(-3) y1 ffffffe8(-24) w1 ffffffe8(-24) y2 fffffffd(-3) w2 1ffffffd(536870909)
---------------------(C++11)ビット演算子-------------------------
/****************************/ /* ビット演算子 */ /* coded by Y.Suganuma */ /****************************/ #include <stdio.h> int main() { /* ビット演算子 */ int x1 = 0x00000031; int x2 = 0xfffffff2; int y1 = x1 bitand 0x0000000f; /* 下位4ビットの取り出し */ int y2 = x2 bitand 0x0000000f; /* 下位4ビットの取り出し */ int z1 = y1 xor y2; /* 排他的論理和(和になっている) */ // int z1 = y1 bitor y2; /* この場合は,論理和でも可能 */ int z2 = compl(z1) + 1; /* -3に対する2の補数表現 */ printf("ビット演算子\n"); printf(" y1 %08x(%d) y2 %08x(%d)\n", y1, y1, y2, y2); printf(" z1 %08x(%d) z2 %08x(%d)\n", z1, z1, z2, z2); return 0; }
ビット演算子 y1 00000001(1) y2 00000002(2) z1 00000003(3) z2 fffffffd(-3)
----------------------(C++11)ビット演算子終わり--------------------
<<= x <<= 3 x を 3 ビット左にシフトして,その結果を x に代入 >>= x >>= 3 x を 3 ビット右にシフトして,その結果を x に代入 &=(and_eq(C++11)) x &= y x と y のビット毎の論理積を計算し,その結果を x に代入 |=(or_eq(C++11)) x |= y x と y のビット毎の論理和を計算し,その結果を x に代入 ^=(xor_eq(C++11)) x ^= y x と y のビット毎の排他的論理和を計算し,その結果を x に代入
x = 0, y = 0, z = 10;
論理式 ? 式1 : 式2
x = (y > 5) ? 10 : 20;
sizeof(int)
情報学部 | 菅沼ホーム | 全体目次 | 演習解答例 | 付録 | 索引 |