gamma codeを実装してみた

variable-byte(VB) codeに引き続きgamma codeを実装してみた.今度はかなり苦労.
というのもVBのように固定長でないため,異なるビット長の結果を詰めて格納していかなければならない.先輩に教わったマスクの作り方(~0ビット列を左シフトして戻ーす,右シフトして戻ーす.はい,マスクのできあがりー)がようやく実践できた.


ビット演算に慣れるとそこまで難しくないけれど,気を抜くと変なところでバグを生んでしまう.
結局数時間カタカタやっていたような気がする.


恥ずかしすぎるので例によってコードは秘密


結果はこんな感じ.4 Byte (32 bit)であるunsigned int型の整数3つ(9,13,24)をgamma codeで圧縮.同じ大きさの配列を用意しているので,圧縮後の0の連続はご愛嬌.
おぉ,ちゃんと詰めてくれている!!

# 9 => 1110001
# 13 => 1110101
# 24 => 111101000
plain code: 00000000 00000000 00000000 00001001, 00000000 00000000 00000000 00001101, 00000000 00000000 00000000 00011000
gamma code: 11100011 11010111 11010000 00000000, 00000000 00000000 00000000 00000000, 00000000 00000000 00000000 00000000

超自己満足