プログラミング言語論
第三回
理工学部
情報システム工学科
新田直也
定数表現
10進定数
100
--- そのまま書く
8進定数
0777
--- 先頭に0を付ける
16進定数
0x53fb --- 先頭に0xを付ける.0~fまでを使う.
単精度定数
3.14F, 1.0E+10F --- 末尾にFを付ける
倍精度定数
3.14, 1.0E+10
--- 末尾にFを付けない
文字定数
‘a’
--- シングルクォーテーションで囲む
演算子と式
なぜ演算子が必要か?
足し算を行う 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)
演算子は型を持っている.
算術演算子(+, -, *, /,…):
「数値, 数値 → 数値」
100 + 20
関係比較演算子(<, >, ==, !=,…):
「数値, 数値 → 真偽値」
100 < 20
2項論理演算子(&&, ||):
「真偽値, 真偽値 → 真偽値」
(100 < 20) || (100 > 20)
代入演算子(=, +=, *=, -=, /=,…):
「左辺値, 数値 → 数値」
a = (b = c)
式の書き方(2)
単項符号(+, -):
「数値 → 数値」
-x
単項論理演算子(!):
「真偽値 → 真偽値」
3項演算子(?:):
「真偽値, 数値, 数値→ 数値」 (100 < 20) ? 100 : 20
ポインタ演算子(*), アドレス演算子(&):
*a
「アドレス → 左辺値」
「左辺値 → アドレス」
! (a == b)
&x
式の書き方(3)
基本的に型を守っている限りどれだけ大きな式でも書
ける.
(a = b = c = d = f = g) > 0
(((a > b) || (a == b))?(a = (b = c) + d):e++) > 0
算術演算子
符号演算子
+, -
四則演算子
+, -, *, /
整数剰余演算子
%
べき乗演算子
^
インクリメント/デクリメント演算子
++, - 前置演算
後置演算
n = ++i;
n = i++;
(i = 1 のとき n = 2)
(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 文を使って書く
© Copyright 2026 ExpyDoc