0

ラボを開始するのに問題があります。ラボには次の指示があります。

与えられた値int input = 0b10010110によって、個人が好きなスポーツを決定します。この入力にエラーはないと仮定します。左から順に、各ポジションは次のとおりです: フットボール、野球、バレーボール、水泳、ソフトボール、サッカー、ホッケー、ラクロス。

その位置に 1 がある場合、その人はそのスポーツが好きです。与えられた「バイナリ」入力に基づいて、ユーザーが楽しんでいるすべてのスポーツを画面に出力します。指定された 2 進数について、ユーザーはサッカー、水泳、サッカー、ホッケーが好きです。

  • 文字の配列を作成しないでください。

  • 列挙型のデータ型を使用してください。

文字列の各位置を比較して、それが 1 か 0 かを判断する方法がわかりません. 1

enum sport{
    Football = 0010000000,
    Baseball = 0001000000,
    Volleyball = 0000100000, 
    ... , 
    Lacrosse = 0000000001
};

次に、指定された値の「入力」を左右にシフトして、指定された位置のみを元の値で残し、他のすべての値を 0 に設定する適切な回数を入力します。サッカーの場合:

input << 2; input >> 9; input << 7;

したがって、新しい設定値は になります0010000000。そうすれば、全体の数を比較することができます。ケースごとにそれを行う必要がありますが、別の方法は考えられません。

私は完全にオフですか?ビット操作を使用して各位置の値をチェックするより機能的な方法はありますか? 事前にご支援いただきありがとうございます。

4

2 に答える 2

0

ビットごとの AND 演算子を使用します&

if (input & Football) {
    // Football bit is set
} else {
    // Football bit is not set
}

0bまた、プレフィックスはコンパイラの拡張機能ですが、標準 C ではないことに注意してください。また、enum値では、プレフィックスで始まる数値0は 8 進数形式です (これを修正する必要があります)。ビット操作には 16 進数形式を使用することをお勧めします。

于 2012-10-07T22:06:54.047 に答える
0

1 を適切な桁数だけ左にシフトすることでスポーツ値を定義すると、もう少し読みやすくなります。実際、スポーツ値に単純な列挙を使用し、それを使用してビットをシフトする場所の数を指定できます。

于 2012-10-07T22:10:15.947 に答える