計算機実習 I

第二回 (2014 年 4 月 17日)

演算子の種類、使い方、優先度

http://www.sw.it.aoyama.ac.jp/2014/CP1/lecture2.html

Martin J. Dürst

AGU

© 2005-14 Martin J. Dürst 青山学院大学

今日の予定

ミニテスト

前回の課題について

[昨年度資料につき削除]

前回の演習について

Program Checking System の便利なリンク

演習問題のリスト: http://rpcsr.sw.it.aoyama.ac.jp/courses/6/assignments

提出済みプログラム (課題ごと最善のみ, Best Attempts): http://rpcsr.sw.it.aoyama.ac.jp/attempts?select=best

提出済みプログラム (全部, All Attempts): http://rpcsr.sw.it.aoyama.ac.jp/attempts (注: 一回も提出されてないものは非表示)

Timeline

注: 深夜にはプログラム効率が激減→早めに一旦切り上げ、翌日作業継続

注: 提出日に質問が不可→先日頑張れるところまで頑張って、質問

プログラムの整形

int main (void)
{int i;
for(i=1;i<=10;i++){
printf("%lf\n",pow(2.64,i));
}return 0;
}
int main (void)
{
int i;

for (i=1; i<=10; i++) {
printf("%lf\n", pow(2.64, i));
}

return 0;
}

スペースとインデント

(字下げ、indent)

インデント評価の表示

インデント評価の点数

 インデントの評価の注意点

プログラム変換

演算子

演算子の種類

剰余演算子

(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 /= ca *= (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)

注意: 計算機内で数値は常に二進数で表現されているので、普段行われている入力と出力以外に変換が不要

ビット毎 OR の例

(bitwise or)

(16ビット (short) の例。int は現在多くの PC で 32ビット、一部の高性能の PC で 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) など

ビット毎 AND の例

(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)

ビット毎 XOR の例

(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 · 275 << 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 参照)

今週の演習

自分の PC に Cygwin (gcc,...) がインストールできなかった場合、早めに相談

先週授業に登録しなかった学生は素早く登録のこと!

来週のための準備