情報処理II

情報処理Ⅱ
第2回
2004年10月12日(火)
型(type)

変数や値がどのような種類の情報を持っているか


C, C++, Javaなどでは,変数宣言時に型を決めなければ
ならない
型の違いの例


int i = 1;
float f = 1.0;
char c = '1';
char *p = "1";
相互に変換できる?
(整数の「1」)
(実数の「1」)
(文字の「1」)
(文字列の「1」)
2
型の分類

オブジェクト型







算術型 ⇒ 本日のテーマ
配列型 ⇒ 後日しっかり学ぶ
構造体型 ⇒ 後日しっかり学ぶ
共用体型
ポインタ型 ⇒ 後日しっかり学ぶ
関数型 ⇒
不完全型
派生型
後日学ぶ
3
算術型(よく使う)

char : 文字,小さな範囲の整数


int : 整数


語源…long integer
float : 実数


語源…integer
long : より大きな範囲の整数


語源…character
語源…floating point(浮動小数点)
double : より大きな範囲の実数

語源…double precision(倍精度)
4
算術型(あまり使わない)

たまに見かけるかも






short
unsigned char
signed char
unsigned int
unsigned long
long double

なるべく使わない








short int
long int
long long
long long int
signed
unsigned
signed int
char signed
5
整数型の範囲

整数型(char, int, longなど)のとりうる値は





その型を何バイト(何ビット)で表現するか
符号の有無
で決まる.
nビットなら,2進数を用いて2n個の数値を表現できる.
どの整数型も,0を表現できる.
6
signedとunsigned

signed (符号あり)




unsigned (符号なし)




負の数をとり得る整数
1 0 0 0 0 0 0 0
最小は,-2n-1
0 1 1 1 1 1 1 1
最大は,2n-1-1
負の数をとらない整数
0 0 0 0 0 0 0 0
最小は,0
1 1 1 1 1 1 1 1
最大は,2n-1
n=8の
ビットパターン
signedもunsignedも書かなかったら…


int, short, longでは「符号あり」と決まっている
charでは処理系に依存
7
整数型の範囲の例

例1: int型が4バイト(32ビット)なら,



例2: char型は常に1バイト(8ビット)



-2147483648≦int型の値≦2147483647
0≦unsigned int型の値≦4294967295
char=signed charなら,-128≦char型の値≦127
char=unsigned charなら,0≦char型の値≦255
注意

char以外の整数型のバイトサイズは処理系に依存
• 演習室の環境は,intとlongがともに4バイト.
• intが2バイトという処理系も多い.
8
範囲を越えるとどうなるか?


例1: signed char型変数に13*13を格納すると?
例2: オーバーフローによる無限ループ
9
浮動小数点とは?

科学技術計算では,602000000000000000000000 を
6.02×1023 と書く.


(符号)仮数×底指数による表現を,浮動小数点形式という.




計算例:(6.02×1023)×10 = 6.02×1024
ただし1≦仮数<底,指数は整数(0や負でもよい)
「底」は「基数」とも言う.
計算例:(6×102)×(6×102) = (6×6)×102+2 =
36×104 = 3.6×105
2を底とする浮動小数点形式で表されることが多い.

例:-0.625 (=1/2+1/8)は,「-」1.01(2) * 2-1
10
実数型の範囲(1)

仮数と指数をそれぞれ何ビットで表現するかによって,取り
得る値が決まる.



単精度の例:符号1ビット+仮数部23ビット+指数部8ビット
=32ビット(4バイト)
倍精度の例:符号1ビット+仮数部52ビット+指数部11ビット
=64ビット(8バイト)
ビット数の制約があるため,あらゆる実数を表すことはできな
い.

表現できない数の例:101000 ,√2,π
11
無限小?

1から始めて2でどんどん割っていくと,


いくらでも小さい数ができる?
いずれは0になる?
12
1なのに,1でない?


for文を用いて,0, 0.1, 0.2, ..., 1.0 を取り出す.
注意


(最善) 実数型はループ用変数にしない.
(次善) != ではなく,> や < を用いて終了判定をする.
13
定数の表現方法

整数定数




123, 0123, 0x123
-123
123U, 123L, 123UL
16進数値
( 0~9, a~f )
浮動小数点定数





8進数値
3.14, -3.1415926
.14, 3.
6.02×10-23
6.02E-23
6.02E-23F, 6.02E-23L
上記の英字は,大文字でも小文字でもよい.
14
異なる型の値同士の計算


1/3 と 1.0/3 と 1/3.0 と 1.0/3.0 は同じ値?
演算において,大きい範囲の型に揃えられる.





int > short, int > char (汎整数拡張)
long double > double > float >
long long > long > int (暗黙の型変換)
unsigned > signed
変数に値を格納する(代入する)ときは,変数の型に応じて
型変換が行われる.
注意


unsignedとsignedの整数値を混在させて演算しない.
1/3は,0
15
まとめ



変数や関数などの名前は「識別子」と呼ばれ,そのルール
(命名規則)や慣用的な使われ方がある.
「数」には「整数」と「浮動小数点数」がある.
表現できる数値には制限がある.



「整数」といっても,いくらでも大きな整数値が使えるわけでは
ない.
「実数」といっても,いくらでも精密な実数値が使えるわけでは
ない.
オーバーフロー,計算誤差,型変換に注意.
16
次に学ぶこと

制御文



for, while, do~while
if~else, switch~case
問題


九九の表を出力できる?
1st, 2nd, 3rd, 4th, …,
1000th と順番に序数を生成
できる?
17