第3回 データ型・演算子・式

第3回 データ型・演算子・式












変数名
データ型・サイズ
定数
宣言
算術演算子
型変換
関係演算子と論理演算子
インクリメント・デクリメント演算子
ビットごとの演算
代入演算子と式
条件式
優先度と評価順序
変数名

変数名と記号定数名のルール
 名前は英字と数字で作られる
 第1字は英字でなければならない
 _(アンダースコア)は、英字に含まれる
 伝統的に


変数名は、小文字
定数名は、大文字
 予約語(int,
float, if, else,for,while などの文法で予約され
たもの)を使用してはならない
型名とサイズ

C言語で扱う基本データ型
型名
サイズ
扱えるデータ
の範囲
char
1 byte
-128 ~127
int
float
double
16 or 32 bit
(処理系依存)
-32768~32767
か
-2147483648~
2147483647
説明
1文字(文字コード)分の変数を格納で
きる型
整数
32 bit
およそ10-38~1038
(有効桁7桁)
単精度浮動小数点
64 bit
およそ10-308~10308
(有効桁15桁)
倍精度浮動小数点
修飾子: short, long, signed, unsigned
変数の数値表現
- int 型(32bit)の場合 31 30
0
4 Bytes
MSB: 符号(正:0, 負:1)を示すビット
LSB
• 数値は2の補数で表現される
• 符号無しの場合は、unsigned を前につける
定数





整数定数 ... int 型として用意される
少数定数 ... 修飾子がない限り、double型
long の整数定数 ... 数値の最後にLをつける
unsignedの整数定数 ... 数値の最後にUをつける
文字定数 ... 単一引用符(':シングルクォート)に囲まれた一
字の該コンピュータの文字セットの文字の値が入る



cf. ) ASCII コード
文字列定数 ... 2重引用符(": ダブルクォーテーション)に囲ま
れた0個以上の文字の列。文字列の最後'\0'が挿入される
列挙定数 ... 整数定数のリスト。値を指定されていない場合
は、最後に指定された数値から順番に1ずつ増えた値が設
定される。

enum boolean { NO, YES };
宣言
全ての変数は、使用する前に宣言する必要
がある
 宣言は



[ 型名 ] <変数名>;
同じ型の変数をまとめて宣言することができ
る(,で区切る)

int a, b, c;
変数の初期化

変数は、宣言時に値(初期値)を設定することができ
る(初期化という)
 例)
int

変数 a に 初期値 0 を設定する
a = 0;
初期化と代入は違う
 初期化は、コンパイラが変数を用意するときに設定される
値
 代入は、ユーザの文によって、値が書き込まれる

初期化しない場合の変数の値は、不定値になる
 バグの温床になるため、なるべく初期化して使う
算術演算子

2項算術演算子
+

, -, *, / , %(剰余演算子:モジュロ)
%は、float やdouble には適用できない
関係演算子

関係演算子
 >,

等値演算子


>=, < , <=
==, !=
関係演算子は算術演算子より優先度が低い
論理演算子

2項論理演算子

&&(かつ), || (または)
評価は左から右にされ、真か偽の結果が得
られた時点で終わる
 &&は||よりも優先度が高い
 単項論理演算子

!
(否定) ... 真偽値を反対に設定する
型変換
型の異なる変数に代入する場合、型変換が
必要になる場合がある
 暗黙の型変換:2つの被演算数の型が異なる
ときは、暗黙的に型が変換されて揃えられる

(テキスト・P54,55)

明示的な型変換をする場合、キャスト演算子
 (型名)
される
を変数の前につけると型変換が明示的に
インクリメント演算子、デクリメント演算子

インクリメント演算子:
 1加算:
++
 ++a; ... a に 1 を加算してから a を参照する
 a ++; ... a を参照してから 1 を減算する

デクリメント演算子:
 1減算:
- --a; ... a に 1 を減算してから a を参照する
 a --; ... a を参照してから 1 を減算する
ビットごとの論理演算子




& ... ビットごとのAND
| ... ビットごとのOR
^ ... ビットごとの排他的論理和(XOR)
<< ... 左シフト


>> ... 右シフト


x << n ... n ビットシフト
x >> 2 ... n ビットシフト
~ ... 1の補数(単項演算子)
代入演算子と式
i = i + a → i += a と省略してかける
 たいていの2項演算子は、上のような代入演
算子をもつ

 +=,
-=, *=, /= , %=, <<=, >>= , &=, |=, ^=
条件式
3項演算子? : は、条件式
 expr1 ? expr2 : expr3;

の式の評価が真ならば、expr2 の値を、偽
であればexpr3 の値を左値に代入
 ( a > b )? a : b;
 expr1
演算子の優先度と評価順序

演算子には、評価順序(優先度)が決められている
 例)



乗除算は、加減算よりも優先度が高い
演算子には、それぞれ結合規則の向きが存在する
詳しくは、教科書のP65の表2-1
明示的に評価順序を変える場合は、優先する演算
を括弧()で括る