10章 変数のサイズ
http://www.geocities.jp/ky_webid/c/010.html
10章の大台に乗りました。
signedとunsignedのお話がありました。
unsignedをつけると負の整数値を格納できない代わりに、正の整数値の上限があがります。
以下、早見表
データ型 | 大きさ | 値の範囲 |
---|---|---|
char | 1バイト | signed charかunsigned charと同じ |
signed char | 1バイト | -128〜127 |
short int | 2バイト | -32,768〜32,767 |
unsigned short int | 2バイト | 0〜65,535 |
int | 4バイト | -2,147,483,648〜2,147,483,647 |
unsigned int | 4バイト | 0〜4,294,967,295 |
long int | 4バイト | -2,147,483,648〜2,147,483,647 |
unsigned long int | 4バイト | 0〜4,294,967,295 |
float | 4バイト | 6桁分の精度 |
double | 8バイト | 10桁分の精度 |
long double | 10バイト | 10桁分の精度 |
最大値の次の値の話が面白いですね。
各種宣言した型の限界値に足す1をすると、最小値まで戻るという仕様です。
なるほど。気をつけないとえらいことになりそうですね。
問題1
次のプログラムを実行すると、何と表示されるか試してみて下さい。
int main(void) { char c = 'a'; printf( "%c = %d\n", c, c ); printf( "%c + 1 = %c\n", c, c+1 ); return 0; }
お試し系の問題です。
これは第5章でちょっとやりましたね。char型のデータを%dで表示させると文字コードが出力されます。
c+1ってことは文字コードに1を足して「b」になるわけですね。
以下一応、実行結果
$ main a = 97 a + 1 = b
予想通りです。
問題2
次のプログラムを実行すると、何と表示されるか試してみて下さい。
int main(void){ int num = (-1); unsigned int unum = num; printf( "unum = %d\n", unum ); printf( "unum = %u\n", unum ); return 0; }
こちらもお試し系。
numは負の整数を格納できる型。unumはできない型。
限界値プラス1で最小値に戻るので、今度は逆に最大値になるんじゃないかと予想。
%dは「-1」で%uは「4294967295」になるとみた!どうだ!?
答え合わせ
unum = -1 unum = 4294967295
よし!完璧。
大分わかってきました。
この調子で頑張ります。