アカウント名:
パスワード:
以前はコンパイラーが賢くなかったし乗算が遅かったので、 C 言語の入門書には「y = x * 8; でなく y = x << 3; を使いましょう」などと書かれていたものです。 z = x * 8 + 1; と等価のつもりで z = x << 3 + 1; と書いてバグったのも良い思い出です。
(x << 3) + 1 ではなく x << (3 + 1) と解釈される、ということではないかと。
はい、そういうことでした。どうしてシフト演算子の優先順位は * や / と同じでないんだ、と文句を言いたくなったものです。
シフト演算子の優先順位が自然に受け入れられる、不自然でない例を考えてみたのですが、foo = 四則演算1 4 | 四則演算2 ;くらいしか思い浮かびませんでした。
こんな危なっかしいメモリ節約テクニックも、今では使わない方がいい昔のコーディングテクですよね。
# 都市伝説っぽいが、何かのゲームのデバッグに高橋名人が関わったとき、彼は偶然にも「1秒間に16回以上ボタンを押すと異常が発生する」バグを見つけたことがあるらしい。
シフト演算子の優先順位が自然に受け入れられる、不自然でない例を考えてみたのですが、 foo = 四則演算1 4 | 四則演算2 ; くらいしか思い浮かびませんでした。
「foo = 四則演算1 << 4 | 四則演算2 ;」ですよね。たしかにビットフィールドのようなものをビット演算を使って自力で実現しようとすることが頻繁にあれば、現状の優先順位に多少は意味があるかもしれませんね。おっしゃる通り、今や普通の PC アプリケーション開発では使われない手法だと思いますが。
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
アレゲは一日にしてならず -- アレゲ見習い
シフト演算 (スコア:3, 興味深い)
以前はコンパイラーが賢くなかったし乗算が遅かったので、 C 言語の入門書には「y = x * 8; でなく y = x << 3; を使いましょう」などと書かれていたものです。 z = x * 8 + 1; と等価のつもりで z = x << 3 + 1; と書いてバグったのも良い思い出です。
Re:シフト演算 (スコア:0)
Re:シフト演算 (スコア:1)
(x << 3) + 1 ではなく x << (3 + 1) と解釈される、ということではないかと。
1を聞いて0を知れ!
Re:シフト演算 (スコア:2)
はい、そういうことでした。どうしてシフト演算子の優先順位は * や / と同じでないんだ、と文句を言いたくなったものです。
Re:シフト演算 (スコア:1)
シフト演算子の優先順位が自然に受け入れられる、不自然でない例を考えてみたのですが、
foo = 四則演算1 4 | 四則演算2 ;
くらいしか思い浮かびませんでした。
こんな危なっかしいメモリ節約テクニックも、今では使わない方がいい昔のコーディングテクですよね。
# 都市伝説っぽいが、何かのゲームのデバッグに高橋名人が関わったとき、彼は偶然にも「1秒間に16回以上ボタンを押すと異常が発生する」バグを見つけたことがあるらしい。
1を聞いて0を知れ!
Re:シフト演算 (スコア:2)
「foo = 四則演算1 << 4 | 四則演算2 ;」ですよね。たしかにビットフィールドのようなものをビット演算を使って自力で実現しようとすることが頻繁にあれば、現状の優先順位に多少は意味があるかもしれませんね。おっしゃる通り、今や普通の PC アプリケーション開発では使われない手法だと思いますが。
Re: (スコア:0)