5

私は持っている:

int8_t byteFlag;

最初のビットを取得したいですか?&おそらく使用する必要があると思います>>が、正確にはわかりません。何か助けはありますか?

4

5 に答える 5

9
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ます。

于 2013-01-25T18:43:16.703 に答える
3

& 演算子を使用します。

「最初のビット」がLSBを意味する場合:

int firstBit = byteFlag & 1;

「最初のビット」がMSBを意味する場合:

int firstBit = byteFlag >> (sizeof(byteFlag) * 8 - 1);
于 2013-01-25T18:39:08.787 に答える
3

上位ビットをマスクするだけ

int8_t high_bit = byteFlag & (1 << 7); //either 1 or 0

これはsigned intであるため、別のトリック

if (byteFlag < 0) firstBitSet = true;

最後の 1 つは、2 の補数で数値を表現するために機能します。数値が負の場合、上位ビットが設定されます。

于 2013-01-25T18:39:09.207 に答える
0

解決策を以下に示します。数値の最初のビットを取得するには、ビット = 1 に設定します。

int bitvalue(int8_t num, int bit)
{
    if (bit > 0 && bit <= 8)
        return ( (num >> (bit-1)) & 1 );
    else
        return 0;
}
于 2014-09-08T20:02:06.517 に答える
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. */
于 2013-01-25T18:42:01.423 に答える