×
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
よくやる間違いについて自戒メモ。
僕ァ、比較的低級な演算子が好きだナァ。
ビット演算子とか、三項演算子とか。あとswitch構文も好きだナァ。
で、好きな筈のビット演算子でよくハマってしまうミスについて。
例えば奇数を求めるとき
僕ァ、比較的低級な演算子が好きだナァ。
ビット演算子とか、三項演算子とか。あとswitch構文も好きだナァ。
で、好きな筈のビット演算子でよくハマってしまうミスについて。
例えば奇数を求めるとき
i << 1 + 1
なんてうっかり書くと、目的の出力は得られないしエラーも出ないってんで、参っちまいます。
+演算子のほうがビットシフト演算子よりも優先されるために、上の式は
+演算子のほうがビットシフト演算子よりも優先されるために、上の式は
i * 4
と同値になってるんですな。
あと、ある整数が偶数かどうかの真偽値を
あと、ある整数が偶数かどうかの真偽値を
i & 1 == 0
とか書いちまったりするんですが、これも間違い。
関係演算子のほうがビット演算子よりも強いんですな。つまり上の式は、
関係演算子のほうがビット演算子よりも強いんですな。つまり上の式は、
i & false
と同値になっちまってんです。javaだとエラーが出ますね。
比較的柔軟な言語であれば false=0 で解釈されるので、結果はいつもfalse(奇数)になってしまう。
で、大事なことは何かってぇと、演算子の強弱関係を把握する、ってことじゃなくて、例え若干の冗長表現になろうと、明示的に括弧で括ってやる、ってことなんだろうな。それが真心ってもんじゃぁねえかな。
上の例だと
比較的柔軟な言語であれば 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 |
最新記事
(05/23)
(05/11)
(05/09)
(05/08)
(05/08)
(03/07)
(02/25)
(02/07)
(02/07)
(01/28)
最新コメント
[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]
最新トラックバック
カテゴリー
アーカイブ
ブログ内検索
アクセス解析