ビット処理ノウハウ
何年やっても次々と新しい発見があるという
Rubyですが、ほんとにいろいろ発見があります。
最近は組み込み系のマシンにRubyのプログラムを
のっける関係でビット処理をしていたのですが、
いろいろ発見がありましたね。
特定のビットが立っているかを調べる
最初、こんなコードを書いていました。
def flag_b (@flag & 0b0010) == 0b0010 ? true : false end
なんとかならんのか?と思っていたら、
def flag_b @flag[1] == 1 ? true : false end
これでよかった。
trueとかfalseでなくて、1か0を返すなら、
def flag_b @flag[1] end
でOKです。
特定のビットに値を代入するには
def flag_b=(opt) opt ? @flag=@flag | 0b0010 : @flag=@flag^0b0010 end
とやってみて、なんとかならんのかと思ったら、
def flag_b=(opt) opt ? @flag|=0b0010 : @flag^=0b0010 end
自己代入でビット処理ができました。
ビットの演算も自己代入演算出来て、便利です。
optの中身が真だったらビットを立てる。
optの中身が偽だったらビットを下ろす仕様です。