「変数について」でも書いたように、変数には様々な型があり、型によって表現できる範囲が異なります。
変数の型の範囲を超えた値を代入すると、思ったとおりの値が出てこない場合があります。
※範囲を超えているのですから、正しく表示される保障はありませんよね。
#include <stdio.h> int main(void) { char data = 200; printf("data = %d\n", data); } |
<実行結果>
data = -56 続行するには何かキーを押してください・・・
char型の変数dataに200を代入していますが、結果は-56です。
char型の表現可能範囲は、-128〜+127までです。
200はchar型の表現範囲を超えていますので、きちんと表現できていません。
では、なぜ-56になるのでしょうか?
説明する前に、次の例も実行してみましょう。
#include <stdio.h> int main(void) { unsigned char data = 300; printf("data = %d\n", data); } |
<実行結果>
data = 44 続行するには何かキーを押してください・・・
unsigned char型の変数dataに300を代入していますが、結果は44です。
unsigned char型の表現可能範囲は、0〜255までです。
300はunsigned char型の表現範囲を超えていますので、きちんと表現できていません。
では、なぜ44になるのでしょうか?
これらのことには理由がありますが、理由を説明するために2進数から勉強しましょう。
なぜ、2進数かというと、コンピュータ内部での数値表現は2進数が基本だからです。
では「2進数について」を見てください。
ブラウザの戻るボタンで戻ってください。