• ベストアンサー

ビットの取り出し方法

いつもお世話になっております。 今回はビットの取り出しについてお聞きしたいです。 たとえばDWORD型の変数があったとして、この変数の5ビット目は0か1かと いうことを知る簡潔な方法はありますか? セットするときはシフト演算を使えばできますが、 あらかじめセットされたものの指定ビット目を得る方法が知りたいです。 bit = dw % 2 という計算でできると思ったのですが、最上位ビットが 何ビット目か判断する方法がよくわからなかったので ご教授願います。

質問者が選んだベストアンサー

  • ベストアンサー
  • auty
  • ベストアンサー率58% (284/486)
回答No.1

>>> たとえばDWORD型の変数があったとして、この変数の5ビット目は0か1かと いうことを知る簡潔な方法はありますか? 5ビット目のみが1、その他のビットはすべて0の定数を準備し、それとのAND演算により得られた結果が 整数として0のときは、0 そうでないときは、1 と判断します。

その他の回答 (3)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.4

ああ, 最上位ビットを調べるならおそらく x & ~(~(DWORD)0 >> 1) でいいと思う.

  • thamansa
  • ベストアンサー率40% (95/232)
回答No.3

No1の方の回答をサンプルにしてみました。 >5ビット目のみが1、その他のビットはすべて0の定数を準備し、それとのAND演算により得られた結果が 整数として0のときは、0 というのはこういうことです。 int a; /* 判定対象の数*/ int b = 16; /* 5ビット目が1な数は16*/ if( a & b ){ /* a の5ビット目は1 */ }else{ /* a の5ビット目は0 */ }

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

(x >> k) & 1U で「k ビット目」がとりだせるんじゃない? ちなみに最下位ビットが「0ビット目」ね.

関連するQ&A

専門家に質問してみよう