BLOGサブスレッドの日常

2016.06.28

演算結果は int です

tama

tamaです。月曜日は週明けでバタバタしていてブログ更新の時間が取れませぬ(´;ω;`)

先日ふえぇすぶっくで、昔お世話になった取引先の方とCコンパイラの話になりました。
(軽率に尊敬という言葉を使いたくないけれど、技術者として管理者として今も尊敬してる方)

  unsigned short a = 0;
  unsigned short b = 0xFFFF;
  if (a == b + 1) {
    printf("equal");
  } else {
    printf("not equal");
  }

gccのコンパイラで↑このコードが not equal になる、と。

そうなんです。C言語に限らず多くの言語は、整数の算術演算結果って自動的に int になるのです。
上の例だと b + 1 は暗黙の int になるので (unsigned short)0 ではなく (int)65536 なんですね。
これよくハマるのは char型変数を文字にするときとか。

検証していくともっと楽しいあれこれあるのですがとりあえず今日はメモ程度にネタ落とし。

この記事を書いた人

tama