私は持っている:
int8_t byteFlag;
最初のビットを取得したいですか?&
おそらく使用する必要があると思います>>
が、正確にはわかりません。何か助けはありますか?
私は持っている:
int8_t byteFlag;
最初のビットを取得したいですか?&
おそらく使用する必要があると思います>>
が、正確にはわかりません。何か助けはありますか?
int func(int8_t byteFlag, int whichBit)
{
if (whichBit > 0 && whichBit <= 8)
return (byteFlag & (1<<(whichBit-1)));
else
return 0;
}
func(byteFlag, 1)
LSB から 1 番目のビットを返すようになりました。8 番目のビット (MSB) を取得するように8
渡すことができます。whichBit
<<
左シフトオペランドです。1
値を適切な場所にシフトし&
、その特定のビットの値を取得する操作を行う必要がありbyteFlag
ます。
為にfunc(75, 4)
75 -> 0100 1011
1 -> 0000 0001
1 << (4-1) -> 0000 1000 //means 3 times shifting left
75 & (1 << (4 - 1))
私たちに与え1
ます。
& 演算子を使用します。
「最初のビット」がLSBを意味する場合:
int firstBit = byteFlag & 1;
「最初のビット」がMSBを意味する場合:
int firstBit = byteFlag >> (sizeof(byteFlag) * 8 - 1);
上位ビットをマスクするだけ
int8_t high_bit = byteFlag & (1 << 7); //either 1 or 0
これはsigned intであるため、別のトリック
if (byteFlag < 0) firstBitSet = true;
最後の 1 つは、2 の補数で数値を表現するために機能します。数値が負の場合、上位ビットが設定されます。
解決策を以下に示します。数値の最初のビットを取得するには、ビット = 1 に設定します。
int bitvalue(int8_t num, int bit)
{
if (bit > 0 && bit <= 8)
return ( (num >> (bit-1)) & 1 );
else
return 0;
}
int8_t bit_value = (byteFlag & (1U << bitPosition)) ? 1 : 0 ;
/* now it's up to you to decide which bit is the "first".
bitPosition = 0 is the minor bit. */