情報処理Ⅱ

情報処理Ⅱ
第2回:2003年10月14日(火)
本講義に関するWebページ

http://www.wakayama-u.ac.jp/~takehiko/ipii2003/


和歌山大学 – システム工学部 – 情報通信システム学科 –
スタッフ一覧 – 田中猛彦 – 情報処理II
講義に使用したスライドと例題プログラムの「画像」を
設置


復習用
プログラムは自分で入力して動かそう
型

型(type)とは?



値はどんな種類の情報を持っているか?
変数はどんな種類の情報を格納できるか?
型により異なる値






整数値:
実数値:
文字:
文字列:
1
1.0
‘1’
“1”
計算機処理では「別々の情報」とみなすほうが効率がよい.
相互に変換できる?
型(オブジェクト型)の分類






算術型 ⇒ 本日のテーマ
配列型
構造体型
派生型
共用体型 ⇒ 本講義では取り上げない.
ポインタ型
オブジェクト型の他に,関数型,不完全型がある.
算術型(よく使う)

char : 文字,小さな範囲の整数


int : 整数


語源…long integer
float:実数


語源…integer
long : より大きな範囲の整数


語源…character
語源…floating point(浮動小数点)
double : より大きな範囲の実数

語源…double precision(倍精度)
算術型(あまり使わない)

たまに見かけるかも






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
例題1

様々な型の変数に1を代入するプログラム.
整数型の範囲
C言語によるプログラミング[スーパーリファレンス編] p.65より

範囲は処理系に依存し,上記は一つの例にすぎない.

演習室の環境では,intとlongの範囲が同じ.
signedとunsigned

signed (符号あり)




負の数をとり得る整数
最小は,-2n-1
最大は,2n-1-1
1
0
0
0
0
0
0
0
0
1
1
1
1
1
1
1
unsigned (符号なし)




n: 整数値のサイズ(ビット数).
処理系および型により異なる.
負の数をとらない整数
最小は,0
最大は,2n-1
n=8の
場合
0
0
0
0
0
0
0
0
1
1
1
1
1
1
1
1
signedもunsignedも書かなかったら…


int, short, longではsignedと決まっている
charでは処理系に依存
signedとunsigned (n=3)
符号なし
符号あり
ビットパターン
0
0
0
0
0
1
1
0
0
1
2
2
0
1
0
3
3
0
1
1
4
-4
1
0
0
5
-3
1
0
1
6
-2
1
1
0
7
-1
1
1
1
範囲を越えるとどうなるか?



例題2: signed char型変数に13*13を格納すると?
例題3: オーバーフローによる無限ループ
どのような値になるかの推測は難しくないが,それを当
てにしてプログラムを組んではいけない.
浮動小数点とは?

0.0000000000000000000000602 ではなく 6.02×10-23
と書く.


(符号)仮数×底指数による表現を,浮動小数点形式という.




例:(6.02×10-23)×10 = 6.02×10-22
ただし1≦仮数<底,指数は整数(0や負でもよい)
「底」は「基数」とも言う.
例:(6×102)×(6×102) = (6×6)×102+2 = 36×104 =
3.6×105
C処理系では2を底とする浮動小数点形式で表すことが
多い.

例:-0.625 (=1/2+1/8)は,「-」1.01(2) * 2-1
浮動小数点型の範囲(1)

仮数,指数ともメモリ上の制約があるため,あらゆる実
数を表すことはできない.


表現できない数の例:101000 ,√2,π
範囲(定数の値は処理系依存)
C言語によるプログラミング[スーパーリファレンス編] p.66より
例題4

1から始めて2でどんどん割っていくと,いずれは0にな
る.
定数の表現方法

整数定数




16進数値
( 0~9, a~f )
123, 0123, 0x123
-123
123U, 123L, 123UL
浮動小数点定数





8進数値
3.14, -3.1415926
.314, 3.
6.02×10-23
6.02E-23
6.02E-23F, 6.02E-23L
上記の英字は,大文字でも小文字でもよい.
例題5

これは何をするプログラムか?
「…を使用せず…するプログラム」の形で答えよ.

解答例:
他の変数を使用せず,2つの変数の値を交換する
プログラム.


floatに替えても利用可能.
「+」と「-」を,「*」と「/」に替えても動作する.
異なる型の値同士の計算


例題6: 1/3,1.0/3,1/3.0,1.0/3.0 は同じ値?
演算において,暗黙の型変換により,大きい範囲の型に
揃えられる.




long double > double > float >
long long > long > int > short > char
unsigned > signed
変数に値を格納するときは,変数の型に応じて暗黙の型
変換が行われる.
注意点


unsignedとsignedの整数値を混在させて演算しない.
1/3は0
まとめ


「数」には「整数」と「浮動小数点数」がある.
表現できる数値には制限がある.



「整数」といっても,いくらでも大きな整数値を作れるわ
けではない.
「実数」といっても,いくらでも精密な実数値を作れるわ
けではない.
オーバーフロー,計算誤差,暗黙の型変換に注意.
次回講義について



10月21日(火):休講
10月28日(火):松田先生による授業.部屋はここ.
11月4日(火)以降:通常通り