パスワードを忘れた? アカウント作成
この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。

もうやらなくていい昔のコーディングテクニックあれこれ」記事へのコメント

  • 以前はコンパイラーが賢くなかったし乗算が遅かったので、 C 言語の入門書には「y = x * 8; でなく y = x << 3; を使いましょう」などと書かれていたものです。 z = x * 8 + 1; と等価のつもりで z = x << 3 + 1; と書いてバグったのも良い思い出です。

    • by Anonymous Coward on 2009年05月05日 13時57分 (#1559486)
      何がいけないん?
      親コメント
      • by greentea (17971) on 2009年05月05日 15時33分 (#1559543) 日記
        演算子の順序の問題で x << 3 + 1 は
        (x << 3) + 1 ではなく x << (3 + 1) と解釈される、ということではないかと。
        --
        1を聞いて0を知れ!
        親コメント
        • (x << 3) + 1 ではなく x << (3 + 1) と解釈される、ということではないかと。

          はい、そういうことでした。どうしてシフト演算子の優先順位は * や / と同じでないんだ、と文句を言いたくなったものです。

          親コメント
          • by greentea (17971) on 2009年05月06日 8時45分 (#1559894) 日記

            シフト演算子の優先順位が自然に受け入れられる、不自然でない例を考えてみたのですが、
            foo = 四則演算1 4 | 四則演算2 ;
            くらいしか思い浮かびませんでした。

            こんな危なっかしいメモリ節約テクニックも、今では使わない方がいい昔のコーディングテクですよね。

            # 都市伝説っぽいが、何かのゲームのデバッグに高橋名人が関わったとき、彼は偶然にも「1秒間に16回以上ボタンを押すと異常が発生する」バグを見つけたことがあるらしい。

            --
            1を聞いて0を知れ!
            親コメント
            • シフト演算子の優先順位が自然に受け入れられる、不自然でない例を考えてみたのですが、
              foo = 四則演算1 4 | 四則演算2 ;
              くらいしか思い浮かびませんでした。

              「foo = 四則演算1 << 4 | 四則演算2 ;」ですよね。たしかにビットフィールドのようなものをビット演算を使って自力で実現しようとすることが頻繁にあれば、現状の優先順位に多少は意味があるかもしれませんね。おっしゃる通り、今や普通の PC アプリケーション開発では使われない手法だと思いますが。

              親コメント
        • by Anonymous Coward
          ていねいな解説ありがとう

アレゲは一日にしてならず -- アレゲ見習い

処理中...