C言語学習ポータル(無料版) 学習コンテンツ つまずきとエラー 演算子の優先順位の誤解

📦 変数・型・演算子

演算子の優先順位の誤解

どんなときに起きるか

if (x & 1 == 0) が思った通りに動きません。gcc: warning: suggest parentheses around comparison in operand of '&' [-Wparentheses]。*p++ を「指す先を1増やす」つもりで書いて、値が増えないのも同じ種類の誤解です。

なぜそうなるのか

== は & より優先順位が高いので、x & 1 == 0 は x & (1 == 0) すなわち x & 0 になります。*p++ は *(p++) と解釈され、増えるのはポインタのほうです。

直し方・再発防止

意図を括弧で書きます: if ((x & 1) == 0)、(*p)++。ビット演算・条件演算子・カンマ演算子が混ざる式は、優先順位を暗記するより括弧を足すほうが安全で読みやすくなります。-Wall の parentheses 警告を無視しないことが再発防止です。

アプリでしっかり学ぶ(無料・登録不要) つまずき一覧へ

同じ場面で起きやすいつまずき

整数どうしの割り算が切り捨てられるint a = 7, b = 2; double r = a / b; の結果が 3.5 ではなく 3.0 にな… 変数を初期化せずに使う実行するたびに結果が変わります。自分のPCでは0で正しく動くのに、別の環境や最適化を変えた途端に壊れます。gcc… 浮動小数点数を == で比較するif (0.1 + 0.2 == 0.3) が成立しません。printf("%.17f\n", 0.1 + 0.… キャスト忘れの整数演算(計算の途中であふれる)long long total = 100000 * 100000; の結果が 1410065408 になります…

もっと先へ:ポインタ・メモリ・ファイル入出力・セキュアコーディングを含む全26トラックと、段位検定・模試のフルセットは完全版に収録しています。

完全版(BOOTH)を見る

📚 姉妹教材:手を動かして覚える Linux 教材 — Linuxとインフラの仕組みを地図で学ぶ

Web版 / BOOTH