母国語は,日本語

こんにちは.

今回は演算子の優先順位についてです.

 

●おじさん様様●

発端は,壁情報の記録がなかなか上手くいかなかったことです.

壁がないところに壁を作ったり,壁があるところに壁を作らなかったり…

 

結局デバッグおじさんに手伝って頂きつつ解決しました.

デバッグおじさんになりたい.

 

 

具体的にどんなミスだったかというと,

壁情報を格納するときにビット演算を使っているのですが…

↓のような条件を使っていたんですね.

 

if(a & b == c){…}

 

意図としては,「aとbをAND演算したものがcと等しければ」,つまり青色の部分を先に計算して欲しかったのですが,これがダメだったらしいです.

というのも…

 

           f:id:nunumouse:20160903225258p:plain

↑ビットシフト,不等号,等号,ビットAND,ビットOR,論理AND,論理ORの優先順位

 

 

 

優先順位 あるぞ

 

演算子にまでヒエラエルキーを作るとは,人間も罪深いですね.うぬぬ…

という訳で,

 

 

if(a & b == c){…}

 

こっちが先に計算されてしまっていたみたいですね.

分かったらOKOK…これをこうですね.

 

if((a & b) == c){…}

 

いやぁ,括弧最強ですね.

ミスしないためには,優先順位どうこうを考えるよりも,とりあえず括弧をつけるようにした方がミスを防げるかもしれないですね.

なかなか見つけにくいミスなので,気を付けるようにしましょう.

 

でも,初めての方はミスしてもしょうがないのではないでしょうかね…

だってC言語ですもんね.

母国語は,日本語ですからね.

 

 

では,ぬぬ.