どのようにメンバーの件数をご確認くださいbyteう。
-
02-07-2019 - |
質問
を使用しているバイトもの旗など 10101010
うかを確認するために特定のビットがで 1
または 0
.
解決
この機能試験ができる任意のビット
bool is_bit_set(unsigned value, unsigned bitindex)
{
return (value & (1 << bitindex)) != 0;
}
少し説明:
左シフトのオペレーター(<<)を用いたビットマスクです。(1 << 0)が00000001は、(1 << 1)が00000010は、(1 << 3)が00001000。なので、シフトが0の試験の右端ます。シフトの31の左端ビットの32ビットの値です。
のビット単位で、オペレーター(&)、結果がすべての1のビットは、双方の設定を行います。例:1111&0001=0001;1111&0010==0010;0000&0001="0000"です。その表現(価値(1 << bitindex))はビットマスクの場合、関連するビットが1の値、または0を返す場合、関連するビットは0になります。
最後に、今かどうかのチェック結果はゼロになります。(これを実際にできるようにすることで、私のようにします)
他のヒント
の延長として@Daoks回答
うビットを操作で 本当に 助けとして知られている確かな知識の ビット単位で事業者.
また、ビット単位"と"オペレータCが &
, うどいい:
unsigned char a = 0xAA; // 10101010 in hex
unsigned char b = (1 << bitpos); //Where bitpos is the position you want to check
if(a & b) {
//bit set
}
else {
//not set
}
上記を使用したビット単位"と"(&Cの確認ができるかどうか、特定のビット設定した。も使っていました異なる二つの方法の策定にバイナリー。私のおすすめチェックアウトのWikipediaにリンクです。
ご利用でき、オペレーターの例です:10101010び出すためのものではありませんの三bitことができるの?(10101010と00100000)というだけ00100000ることをご存知のフラグの位置は1です。
ご利用の場合はC++の標準ライブラリは、私の提案を保存しておく旗bitset:
#include <bitset>
//...
std::bitset<8> flags(someVariable);
とを確認することができ、設定フラグを使用し[]指数付けます。
Kristopherジョンソンの応答は非常に良いと個人といった分野です。うにコードを読みやすくなりによるビット分野C.
例えば:
struct fieldsample
{
unsigned short field1 : 1;
unsigned short field2 : 1;
unsigned short field3 : 1;
unsigned short field4 : 1;
}
ここで簡単な構造体との四つの分野それぞれ1ビットサイズです。それができますコード用シンプルな構造です。
void codesample()
{
//Declare the struct on the stack.
fieldsample fields;
//Initialize values.
fields.f1 = 1;
fields.f2 = 0;
fields.f3 = 0;
fields.f4 = 1;
...
//Check the value of a field.
if(fields.f1 == 1) {}
...
}
だが同じ小さなサイズ、プラスモデルができますのでご意味のある分野名の内部構造。
誰もいないとの誤った判断で処理されてきたこれまでにない方法にチェックを任意のビット
int checkBit( byte in, int bit )
{
return in & ( 1 << bit );
}
この機能を返します非ゼロのビットが設定されます。
byte THIRDBIT = 4; // 4 = 00000100 i.e third bit is set
int isThirdBitSet(byte in) {
return in & THIRDBIT; // Returns 1 if the third bit is set, 0 otherwise
}
できとしてDaokというときのビットのビットまたはその前ます。この場合において最終的な結果の1または0になります。
従来は、チェックが最も低いビットがセットは、このように:
int MY_FLAG = 0x0001;
if ((value & MY_FLAG) == MY_FLAG)
doSomething();
使用ビット単位のない論理!) と比較検討する価値に対するビットマスク.
if (var & 0x08) {
/* the fourth bit is set */
}