400
Post/Edit Page
感動的なロジックを見る。ASCIIの0〜fを入力Xとし、これを16進数に変換する処理について、命令数を極限まで減らした効率的なコードを書くとしたらどうするか。0から9はコードの48から57、aからfは97から102なので、まずは2^6のビットを持つかどうかをx&64で判定して数字かアルファベットかを場合分けし、数字が0〜9に、アルファベットが10〜16に対応するよう、差分を引いてやればよい。即ち、x-(x&64?87:48)となる。▼常識的にはそう書くであろう。「しかし私は『return x%87%48』と書きたい」――とH・S・ウォーレンJrは言う。常識の計算には3命令を要するが、彼の手法は2命令だ。このコードが目的を達成できることはすぐにわかる。無駄な条件分岐をしていない分、論理もよりスマートだと言うべきだろう。恐るべき発想である。▼ビット、論理、そして数学。そこにはプログラミングの日常生活では出会うことのできない秘宝が、まだまだたくさん隠れている。
pass:
Draft