オブジェクト指向言語論 第三回 知能情報学部 新田直也.

Slides:



Advertisements
Similar presentations
プログラミング論 第八回数字の計算,整数の入出力. 本日の内容 前回の課題(続き) 前回の課題(続き) 数字の計算をする 数字の計算をする – 加減乗除を行う – インクリメント演算子とデクリメン ト演算子.
Advertisements

2.5 プログラムの構成要素 (1)文字セット ① ASCII ( American Standard Code for Interchange ) JIS コードと同じ ② EBCDIC ( Extended Binary Coded Decimal for Information Code ) 1.
第6回条件による分岐.
プログラミング言語としてのR 情報知能学科 白井 英俊.
プログラミング基礎I(再) 山元進.
情報・知能工学系 山本一公 プログラミング演習Ⅱ 第7回 データの基本型 情報・知能工学系 山本一公
基礎プログラミングおよび演習 第9回
プログラミング基礎I(再) 山元進.
プログラミング言語論 第6回 型 情報工学科 篠埜 功.
第2回:Javaの変数と型の宣言 プログラミングII 2007年10月2日.
プログラミング言語論 第4回 式の構文、式の評価
1.12 式における型変換 1.13 代入における型変換 1.14 コメント 10月31日(金) 発表者:藤井丈明
2016年度 プログラミングⅠ ~ 内部構造と動作の仕組み(1) ~.
情報処理Ⅱ 第4回 2007年10月29日(月).
データ構造と アルゴリズム 第四回 知能情報学部 新田直也.
岩村雅一 知能情報工学演習I 第8回(後半第2回) 岩村雅一
プログラミング入門2 第2回 型と演算 条件分岐 篠埜 功.
プログラムの制御構造 選択・繰り返し.
岩村雅一 知能情報工学演習I 第11回(後半第5回) 岩村雅一
アルゴリズムとプログラミング (Algorithms and Programming)
プログラミング演習I 2003年5月7日(第4回) 木村巌.
プログラミング入門2 第2回 型と演算 条件分岐 篠埜 功.
岩村雅一 知能情報工学演習I 第8回(C言語第2回) 岩村雅一
プログラミング 3 構造体(2).
04: 式・条件分岐 (if) C プログラミング入門 基幹7 (水5) Linux にログインし、以下の講義ページ を開いておくこと
計算機構成 第2回 ALUと組み合わせ回路の記述
プログラミング言語論 第四回 理工学部 情報システム工学科 新田直也.
情報処理Ⅱ 第2回:2003年10月14日(火).
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
構造体と共用体.
地域情報学 C言語プログラミング 第2回 変数・配列、型変換、入力 2017年10月20日
プログラミング言語論 第十一回 理工学部 情報システム工学科 新田直也.
情報処理Ⅱ 第3回 2007年10月22日(月).
2017年度 プログラミングⅠ ~ 内部構造と動作の仕組み(1) ~.
情報処理Ⅱ 第2回 2005年10月14日(金).
情報処理Ⅱ 第2回 2006年10月13日(金).
計算機アーキテクチャ1 (計算機構成論(再)) 第二回 命令の種類と形式
アルゴリズムとデータ構造1 2009年6月15日
情報処理Ⅱ 第7回 2004年11月16日(火).
情報処理Ⅱ 2005年10月28日(金).
プログラミング入門2 第2回 型と演算 条件分岐 篠埜 功.
オブジェクト指向言語論 第十一回 知能情報学部 新田直也.
オブジェクト指向言語論 第九回 知能情報学部 新田直也.
オブジェクト指向言語論 第二回 知能情報学部 新田直也.
岩村雅一 知能情報工学演習I 第8回(後半第2回) 岩村雅一
岩村雅一 知能情報工学演習I 第8回(C言語第2回) 岩村雅一
アルゴリズムとデータ構造 2010年6月17日
プログラミング演習I 数値計算における計算精度と誤差
2014年度 プログラミングⅠ ~ 内部構造と動作の仕組み(1) ~.
演算子のオーバーロード.
第7章 そろそろ int 以外も使ってみよう! ~データ型 double , bool~
2005年度 データ構造とアルゴリズム 第2回 「C言語の復習:配列」
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
データ構造と アルゴリズム 第四回 知能情報学部 新田直也.
情報処理Ⅱ 第2回 2004年10月12日(火).
情報処理Ⅱ 2005年11月25日(金).
オブジェクト指向言語論 第三回 知能情報学部 新田直也.
プログラミング1 プログラミング演習I 第2回.
プログラミング基礎a 第5回 C言語によるプログラミング入門 配列と文字列
マスク合成(のような処理) 出力画像 Out 入力画像1 In1 In1 In2 Out 入力画像2 In
左右反転と180度回転 [0][xsize – 1] [0][0] → i ↓ j [ysize – 1][xsize – 1]
情報処理Ⅱ 小テスト 2005年2月1日(火).
JavaScript    プログラミング入門 2-3 式と演算子 2006/10/12 神津 健太.
プログラミング入門 II 2010年後期.
オブジェクト指向言語論 第九回 知能情報学部 新田直也.
復習 いろいろな変数型(2) char 1バイト → 英数字1文字を入れるのにぴったり アスキーコード → 付録 int
C言語講座 四則演算  if ,  switch 制御文.
情報処理Ⅱ 2006年10月27日(金).
プログラミング演習II 2003年10月29日(第2,3回) 木村巌.
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
Presentation transcript:

オブジェクト指向言語論 第三回 知能情報学部 新田直也

演算子と式 なぜ演算子が必要か? 基本的な演算子はプログラミング 言語に組み込まれている. 足し算を行う while プログラム z = x; c = 0; while (c < y) { z++; c++; } z = x + y; 書くのが楽 読むのも楽 間違えにくい 修正しやすい おまけに高速

演算子,オペランド,式 演算子: 演算を表す記号. (+, -, *, /, >, ==, …) オペランド: 演算対象となる変数,定数,式. 式: 演算子とオペランドを(正しく)結合して得られるもので何かの値を表現する. (a + b) – (c / d) a > b (a > b++)?d->x : (a = b = *c) / k 評価: 式が示す値を計算すること. 型: 変数と同様すべての式は型を持つ.

左辺値 左辺値: 値を代入できる式 左辺値でないもの 変数 x = 20; b = (c = 3); c++; 配列添字式 a[20] = 1; 間接参照式 *p = 15; 左辺値でないもの 15 = 23; a + 2 = 5; a++ = 5

式の読み方 優先順位: 式中に複数種の演算子が存在するとき,どの演算子から先に評価するか? 10 + 20 * 30 → * の方が + より強いので, 10 + (20 * 30) と同じ 結合規則: 同じ優先順位の演算子間でどちらから先に評価するか? 10 + 20 + 30 + は左から右(左結合)に評価されるので, (10 + 20) + 30 と同じ

式の書き方(1) 演算子は型を持っている. 算術演算子(+, -, *, /,…): 「数値, 数値 → 数値」 算術演算子(+, -, *, /,…): 「数値, 数値 → 数値」 関係比較演算子(<, >, ==, !=,…): 「数値, 数値 → 真偽値」 2項論理演算子(&&, ||): 「真偽値, 真偽値 → 真偽値」 代入演算子(=, +=, *=, -=, /=,…): 「左辺値, 数値 → 数値」 100 + 20 100 < 20 (100 < 20) || (100 > 20) a = (b = c)

式の書き方(2) 単項符号(+, -): 「数値 → 数値」 - x 単項論理演算子(!): 「真偽値 → 真偽値」 単項論理演算子(!): 「真偽値 → 真偽値」 3項演算子(?:): 「真偽値, 数値, 数値→ 数値」 ポインタ演算子(*), アドレス演算子(&): 「アドレス(左辺値でない) → 左辺値」 「左辺値 → アドレス」 - x ! (a == b) (100 < 20) ? 100 : 20 * a & x

式の書き方(3) 配列参照演算子([]) 「アドレス(左辺値), 数値 → 左辺値」 基本的に型を守っている限りどれだけ大きな式でも書ける. (a = b = c = d = f = g) > 0 (((a > b) || (a == b))?(a = (b = c) + d):e++) > 0 a[10]

左辺値情報の利用方法 左辺値でないものに代入できない 左辺値でないものはアドレス(格納場所)を持たない int a[100]; int *p; p = a; → ○(pが左辺値なので) a = p; → ×(aは左辺値でないので) printf(“%d\n”, &a); → ×(aは左辺値でないので) printf(“%d\n”, &p); → ○(pが左辺値なので)

算術演算子 符号演算子 四則演算子 整数剰余演算子 べき乗演算子 インクリメント/デクリメント演算子 +, - +, -, *, / % ^ +, - 四則演算子 +, -, *, / 整数剰余演算子 % べき乗演算子 ^ インクリメント/デクリメント演算子 ++, -- 前置演算 n = ++i; (i = 1 のとき n = 2) 後置演算 n = i++; (i = 1 のとき n = 1)

ビット演算子 AND演算子 & OR演算子 | NOT演算子 ~ XOR演算子 ^ 左シフト演算子 << 右シフト演算子 左シフト演算子 << 右シフト演算子 算術シフト >> 最上位に符号ビットが入る 論理シフト >>> (Javaのみ) 最上位に0が入る

関係演算子 大小比較演算子 等値演算子 注意: <, >, >=, <= ==, != <, >, >=, <= 等値演算子 ==, != 注意: 関係演算子は真偽値を返す.(真:1, 偽:0) if (a == b) { a = a + b; } a = a + (a == b) * b;

論理演算子 論理積 && 論理和 || 論理否定 !

参照演算子 メンバ参照演算子 -> ポインタ参照演算子 * 配列参照演算子 [] 手続き呼び出し演算子 ()

代入演算子 単純代入演算子 複合代入演算子 a = b ○を二項算術/ビット演算子と置いたとき, a ○= b は, a = a ○ b を意味する. 例: +=, -=, *=, /=, %=, &=, <<=, >>=, |=, ^=

三項演算子 三項演算子 (a == b) ? c : d

型変換 明示的型変換 暗黙の型変換 キャスト変換 代入変換 算術変換 double d; float f; d = (double)f; f = d; doubleが切り捨てられてfloatに変換される 算術変換 d = f + d; 精度の高いdoubleの方に合わせてから演算

プログラムを書くときの礼儀 読む人にわかり易いプログラムを書くこと. 優先順位や結合規則を知らなくても読めるように. a = b >> c + d; → a = b >> (c + d); 無理に短く書かない. a = a + (a == b) * b; → if 文を使って書く