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

よし!完璧。

大分わかってきました。

この調子で頑張ります。