忍者ブログ
[1]  [2]  [3
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

よくやる間違いについて自戒メモ。

僕ァ、比較的低級な演算子が好きだナァ。
ビット演算子とか、三項演算子とか。あとswitch構文も好きだナァ。
で、好きな筈のビット演算子でよくハマってしまうミスについて。

例えば奇数を求めるとき
i << 1 + 1
なんてうっかり書くと、目的の出力は得られないしエラーも出ないってんで、参っちまいます。
+演算子のほうがビットシフト演算子よりも優先されるために、上の式は
i * 4
と同値になってるんですな。

あと、ある整数が偶数かどうかの真偽値を
i & 1 == 0
とか書いちまったりするんですが、これも間違い。
関係演算子のほうがビット演算子よりも強いんですな。つまり上の式は、
i & false
と同値になっちまってんです。javaだとエラーが出ますね。
比較的柔軟な言語であれば false=0 で解釈されるので、結果はいつもfalse(奇数)になってしまう。

で、大事なことは何かってぇと、演算子の強弱関係を把握する、ってことじゃなくて、例え若干の冗長表現になろうと、明示的に括弧で括ってやる、ってことなんだろうな。それが真心ってもんじゃぁねえかな。
上の例だと
( i << 1 ) + 1
( i & 1 ) == 0
と書けば所望の結果が得られますな。
これで何度つまづいたことか。
PR
26歳のハローワールド
カレンダー
04 2024/05 06
S M T W T F S
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
最新コメント
[11/27 gyzwviyehl]
[11/18 Tepexaxyonelo]
[09/12 gomFolley]
[08/16 CypeBachCoece]
[06/02 gb]
[03/06 kishima]
[01/18 KNDY]
[01/16 kage]
[12/23 KNDY]
[12/23 kage]
最新トラックバック
ブログ内検索
アクセス解析
プロフィール
HN:
knd
HP:
自己紹介:
絶賛迷走中。
UNIQLO CALENDAR
忍者ブログ [PR]