3

私はいくつかの CSE の宿題を終えており、より大きなビット サイズの整数を宣言することについて簡単な質問があります。私の仕事は、x の奇数ビットが 1 の場合に 1 を返し (x のサイズが 32 ビットであると仮定)、それ以外の場合に 0 を返す関数を実装することです。

ビット値で整数を宣言することはできますか?

10101010101010101010101010101010

もしそうなら、これから発生する可能性のある問題はありますか?そうでない場合、なぜですか?? どのような代替手段がありますか?

私の機能:

int any_odd_one(unsigned x)
{
    int mask = 10101010101010101010101010101010
    if(x & mask)
    {
        return 1;
    }
    else
    {
        return 0;
    }
}

ご協力いただきありがとうございます。

-マット

4

2 に答える 2

7

C ではバイナリ リテラルを使用できません。代わりに、16 進数または 8 進数表記を使用してください。

あなたの場合、 16 進数で表現されている場合はunsigned mask = 0xaaaaaaaasince 10101010...isを使用0xaaaaaaaaします (それぞれ1010が16 進a数です)。

于 2012-10-26T22:38:57.963 に答える
3

これを として実装する方が楽しいreturn !!(x&-1u/3*2);です。

問題に記載されている整数幅に加えて、型の任意の偶数ビットに対して機能しますunsigned

于 2012-10-26T23:47:29.263 に答える