計算機実習 I

第二回 (2015 年 4 月 16日)

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

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

Martin J. Dürst

AGU

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

今日の予定

ミニテスト

理工学部50周年記念行事

IT サロンへの誘い

目的:「情テク学生の、情テク学生による、情テク学生のための集まり」

日時:4月22日(水)15:30〜16:00 (15:00開室)

場所:O304室

内容:オリエンテーション(挨拶、今後の活動について)

前回の課題について

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

前回の演習について

Q&A フォーラムをもっと活用

Convenient Links in the
Program Checking System

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

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;
}

Spaces and Indents

(字下げ、indent)

インデント評価の表示

インデント評価の点数

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

プログラム変換

演算子

(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 /= 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ビット又は 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,...) がインストールできなかった場合、早めに相談

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

来週のための準備