Hatena::ブログ(Diary)

みずぴー日記 Twitter

2008-10-08(水)

符号拡張がしたい

| 符号拡張がしたいを含むブックマーク

ABCパースする際に、24ビットの整数を32ビットの整数に符号拡張したくなった。

とりあえず、算術シフトをつかって実現してみた。7ビットシフトなのは、OCaml整数が31ビットだから。

let s_extend d =
  (d lsl 7) asr 7

これでもいいんだけど、CPUによっては符号拡張命令をもっているらしいから、なんかもったいないような気がする。

id:selvaggio方式

http://twitter.com/selvaggio/statuses/950446367で教えてもらった。

let s_extend d =
  0x1fe * (0x00800000 land d) lor d

selvaggioselvaggio 2008/10/09 13:37 シフトが遅いけど乗算が早いマシン向け:-D