10/04/27 11:47:43
制御系プログラミングの初歩として、C言語(++ではない)のビット演算を勉強しています。
unsigned char型の変数を、二進数でバラして8個の0/1フラグとして使うための一番効率のよいやり方って何ですか?
一般的に使われるロジックとしては以下のメソッドのような感じでOKですか?
//引数srcのnビット目を0か1かで取り出す
unsigned char getNbit(unsigned char src,unsigned char n)
{
//srcと2のn乗(nビット目だけ1の値)と論理乗算して、0になったら0を返す。そうでなければ1。
if( src & (1<<n) == 0 )
{
return 0;
}
else
{
return 1;
}
}
//引数srcのnビット目に指定の値param(0/1)をセットした値を返す
unsigned char setNbit(unsigned char src,unsigned char n,unsigned char param)
{
//0をセットする場合、srcと2のn乗の値を反転した値(255-1<<n)とを、論理乗算する
if(param == 0)
{
return src & (255-1<<n);
}
//1をセットする場合、srcと2のn乗(1<<n)の値とを、論理加算する
else
{
return src | (1<<n);
}
}