Ruby Tips / mビット目にnビット目の値を入れる。

Powered by dKingyo 明快入門 | TOEFL 突破 | VB2005 | Linux | シューティング

http://d.hatena.ne.jp/studiokingyo/20070208
にてよく分からなかった。
「mビット目にnビット目の値を入れる。」について考えてみました。


CよりRubyのようなインタプリタの方が試行錯誤しやすいのでRubyで書きました。*1
Cへの移植も容易でしょう。

def flag_down_n(r32,m)
 return r32 & (~(1 << m));
end

#r32のmビット目にa32のnビット目の値を入れる。
def f(r32,m,a32,n)
 a = (a32 & (1 << n))
 b = a >> n;
 r32 = flag_down_n(r32,m)
 r32 = r32 | (b << m)
 return r32
end

#p flag_down_n(0xff,3)

# 01111111の7bit目に01000000の6bit目の値を入れる
p f(0x7f,7,0x40,6)

*1:それだけ試行錯誤したという記録ということでその痕跡が見えますがあまり気にしないで下さい。