http://www.sw.it.aoyama.ac.jp/2014/CP1/lecture2.html
© 2005-15 Martin J. Dürst 青山学院大学
目的:「情テク学生の、情テク学生による、情テク学生のための集まり」
日時:4月22日(水)15:30〜16:00 (15:00開室)
場所:O304室
内容:オリエンテーション(挨拶、今後の活動について)
[昨年度資料につき削除]
01A1 | 01A2 | 01A3 | 01B1 | 01B2 | 01C1 | |
100点 | 78 | 56 | 49 | 38 | 38 | 37 |
60点 | 18 | 40 | 42 | 53 | 51 | 48 |
エラー | - | - | 2 | 2 | 2 | 2 |
未提出 | - | - | 3 | 3 | 5 | 9 |
List of assignments:
http://rpcsr.sw.it.aoyama.ac.jp/courses/7/assignments
Best Attemts (per assignment), including not yet submitted assignments:
http://rpcsr.sw.it.aoyama.ac.jp/attempts?select=best
All Attempts (does not include not yet submitted assignments):
http://rpcsr.sw.it.aoyama.ac.jp/attempts
注: 深夜にはプログラム効率が激減→早めに一旦切り上げ、翌日作業継続
注: 提出日に質問が不可→先日頑張れるところまで頑張って、質問
int main (void) |
int main (void) |
(字下げ、indent)
+5
-18
60点
、部分点) に比例gcc 02B1.c && ./a
を推奨)(operator)
+
, -
,
*
, /
, %
)==
, !=
,
<
, >
, <=
,
>=
)||
,
&&
, !
)++
,
--
)|
,
&
, ^
, ~
,
<<
, >>
)=
, +=
,
-=
, *=
, /=
, %=
,
...)? :
)
と順次演算子 (,
)[]
,
*
, .
, ->
)(modulo operator, 情報数学 I 合同算術参照)
%
の演算子が整数の割り算の余りを計算
例: 22 % 5
⇒ 2
応用: 暗号化、繰り返しの高度な組み合わせ、表の形成など (プログラマの数学第 3 章)
(assignment operators)
代入と演算の組み合わせ
例: a = a + b;
⇔ a += b;
他に -=
, *=
, /=
, %=
,
<<=
, >>=
, &=
,
|=
, ^=
「言い回し」として a += b
の方が完結で分かりやすい
代入演算子は右結合
例:
a * b / c
⇔ (a*b) / c
(左結合、left-associative)
a *= b /= c
⇔ a *= (b/=c)
(右結合、right-associative)
(increment/decrement)
a = a + 1;
⇔ a += 1;
⇔ ++a;
⇔
a++;
(インクリメント)
前置インクレメント: b = ++a;
⇔ b =
(a+=1);
後置インクレメント: b = a++;
⇔ b = a; a +=
1;
デクリメントは「--
」で同様
(side effect)
(bitwise operators)
|
」: ビット毎又は
(論理又はは「||
」)&
」: ビット毎かつ
(論理かつは「&&
」)^
」:
ビット毎「排他的又は」(論理排他的又ははない)~
」: ビット毎否定
(論理否定は「!
」)<<
」: 左シフト (left shift)>>
」: 右シフト (right shift)注意: 計算機内で数値は常に二進数で表現されているので、普段行われている入力と出力以外に変換が不要
(bitwise or)
(16ビット (short
) の例。int
は現在多くの PC で 32ビット又は 64ビット)
変数・式 | 十進数 | ビット | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
a |
10 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 0 |
b |
56 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 0 | 0 | 0 |
a | b |
58 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 0 | 1 | 0 |
応用例: a
の最下位の四つのビットをセット
(a |= 0xF
) など
(bitwise and)
変数・式 | 十進数 | ビット | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
a |
10 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 0 |
b |
56 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 0 | 0 | 0 |
a & b |
8 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 |
応用例:
a
の最下位の四つのビットを抽出 (a &
0xF
)
a
の最下位の四つのビット以外をクリア (a
&= 0xF
)
(bitwise exclusive or)
変数・式 | 十進数 | ビット | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
a |
10 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 0 |
b |
56 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 0 | 0 | 0 |
a ^ b |
50 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 1 | 0 |
用途: 暗号など
(bitwise not)
変数・式 | 十進数 | ビット | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
a |
10 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 0 |
~a |
-32758 または 65525 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 0 | 1 |
(left shift)
変数・式 | 十進数 | ビット | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
a |
10 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 0 |
a << 5 |
320 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 |
応用例: 2n での掛算など (5 ·
27 ⇔ 5 << 7
)
(right shift)
変数・式 | 十進数 | ビット | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
a |
56 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 0 | 0 | 0 |
a >> 4 |
3 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 |
用途: 2n での割り算など
(教科書 p.388/389 参照)
()
: 関数、型変換
(cast)、演算のまとめ、if
文など,
: 引数の区切り、順序演算-
: 単項: 符号反転; 二項: 引き算+
: 単項 (型変換以外) 効果なし; 二項:
足し算*
: 単項: 参照演算子 (ポインタ); 二項:
掛け算&
: 単項: アドレス演算子 (ポインタ); 二項:
ビット毎積自分の PC に Cygwin (gcc,...) がインストールできなかった場合、早めに相談
先週授業に登録しなかった学生は素早く連絡のこと!