ほげにっき

hogedigoの日記

ハッカーのたのしみ

読んだ。

ハッカーのたのしみ―本物のプログラマはいかにして問題を解くか

ハッカーのたのしみ―本物のプログラマはいかにして問題を解くか

  • 作者: ジュニア,ヘンリー・S.ウォーレン,Jr.,Henry S. Warren,滝沢徹,玉井浩,鈴木貢,赤池英夫,葛毅,藤波順久
  • 出版社/メーカー: エスアイビーアクセス
  • 発売日: 2004/09
  • メディア: 単行本
  • 購入: 35人 クリック: 732回
  • この商品を含むブログ (129件) を見る
原題「Hacker's Delight」。bit操作とか、ちょっと複雑な問題を以下にシンプルなコードにおとすか、を徹底的に追求している。とても面白い。プログラミングを楽しんでいた気持ちをちょっと思い出した。


例を一つ。java.math.BigDecimalに、以下の様なコードがある。

if ( (((sum ^ x) & (sum ^ y)) >> 63) == 0L )	// not overflowed

2つのlong変数x, yを加算た後に、結果(sum)がオーバーフローしているかどうかをチェックしているらしいが、パッと見何しているか分からない。
でも、よく考えると理屈が見えてくる。オーバーフローが起きるケースは、x、yの符号が同じで、かつ結果の符号が変わってしまった場合である(x、yの符号が異なる場合はオーバーフローはおきない)。それを簡略化して書いているのだな。*1
このコードにもしっかりと

See "Hacker's Delight" section 2-12

とコメントがついている。由緒正しい本だな。


ほかにも面白い問題がいっぱい。最初はとっつきにくかったけど、読み込むとパズルみたいでハマります。

*1:分かり易く説明すると、「(sumとxの符号bitが異なる)かつ(sumとyの符号bitが異なる)」という式になっている