C言語で暗黙的に行われる型変換についてまとめます。今回は正しく動作しない例を紹介します。
どう動く?
以下のC言語のプログラムの出力を予想してください。
#include <stdio.h>
int main(void)
{
int a = 2000000000;
int b = 2000000000;
long c = 4000000000;
printf("%ld\n", (a + b) + c);
printf("%ld\n", a + (b + c));
return 0;
}
参考までに、現在の一般的なサーバやPCのC言語の処理系依存の整数の大きさは以下です。
- int :32ビット
- long :64ビット
実際の出力
わたくしのPCで試した結果は以下です。多くの環境で同じ結果になると考えています。
3705032704
8000000000
最後に
次の記事で、出力がこのようになる原因について解説いたします。
C言語を使いこなしていきましょう!