0

C アプリで再利用するコードを探していると、次の式に出会いました。

MDO = ((output_data & 0x80) ? 1 : 0);

括弧内の意味はわかりましたが、どういう? 1 : 0 意味ですか?

4

4 に答える 4

4

の省略形で、三項演算子if-elseと呼ばれます。

あなたの場合、それは次のようになります:

if (output_data & 0x80) {
   MDO = 1;
} else {
   MDO = 0;
}

ちょっとしたアドバイスですが、複雑なif構造には使用しないでください。読みやすさを妨げます。このような場合にのみ、すぐに理解できる場合にのみ使用してください。

于 2013-11-11T08:08:38.943 に答える
3

'?' は三項演算子です。

if ((output_data & 0x80) != 0) { MDO = 1; } else { MDO = 0; }

output_data にビット 8 が設定されている場合 (0x80 = 128 = ビット 8)、MDOに割り当て1られます。それ以外の場合、MDO は次の値を取得します。0

より簡単な例: 金曜日には 10 杯のビールがあり、それ以外の場合は 2 杯しかありません。

int beers = (day == Friday) ? 10 : 2;
于 2013-11-11T08:09:52.107 に答える
1

output_data& 0x80 はビットごとのバイナリであり、. したがって、その特定のビットが out_putdata にある場合は 0x80 を返し、それ以外の場合は 0 を返します。

MDO=? :

と同じです

if (expression)
    MDO = 1    
else
    MDO = 0

したがって、output_data でビットがオンの場合、MDO は 1 になり、それ以外の場合は 0 になります。

于 2013-11-11T08:10:07.800 に答える
1

つまり、式が true の場合、MDO の値は 1 になり、それ以外の場合は 0 になります。

于 2013-11-11T08:08:43.593 に答える