C言語・変数の最大値を超えた場合は?
以下のように、宣言した変数の最大値を超えるような計算をした場合、その変数は最小値に戻るようだ。
#include <stdio.h> #include <limits.h> int main(int argc, char * args[]){ int value = INT_MAX; printf("value = %d\n", value); printf("value = value + 1\n"); value = value + 1; printf("value = %d\n", value); return 0; }
この実行結果は以下。
$ ./a.out value = 2147483647 value = value + 1 value = -2147483648
次は、unsigned な変数の例。
#include <stdio.h> #include <limits.h> int main(int argc, char * args[]){ unsigned int value = UINT_MAX; printf("value = %u\n", value); printf("value = value + 1\n"); value = value + 1; printf("value = %u\n", value); return 0; }
実行結果は以下。
$ ./a.out value = 4294967295 value = value + 1 value = 0
unsigned の計算やってみたとき、間違えて unsigned int value = INT_MAX としてしまったが、
この場合は unsigned なしと同じ結果になった。変数の型宣言はあまり厳密じゃなさそう。char を int で扱おうとしても意図した結果になるかはさておき、処理はできてしまったりもするので、C という言語はそういうものなんだろう。プリミティブ型については結構ルーズなのか、、、