情報処理Ⅱ 第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
© Copyright 2024 ExpyDoc