logo サブスレッド

演算結果は int です

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型変数を文字にするときとか。

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

現在の位置:サブスレッド ホーム > 技術ブログ > 演算結果は int です