2016-08-28 4 views
-2

に私はプログラムの本体は、下記のもののようだったC.複数を含む問題「または」演算子はC

にに関連したいくつかの問題を解決する「または」演算子た:

#include<stdio.h> 

main() { 
    int i = 4, j = -1, k = 0, w, x, y, z; 
    w = i || j || k ; 
    x = i && j && k ; 
    z = i && j || k ; 

    printf("\n w=%d , x = %d", w, x); 
    printf("\n y=%d , z = %d", y, z); 
} 

ことができる人これらの声明の仕組みを教えてください。

+1

期待される出力は? – haccks

+0

私はw = 1、x = 0、z = 1だと思います –

+0

なぜYを印刷していますか? –

答えて

-2

|| & &演算子は論理演算子であり、数値を 'true'または 'false'として評価することを意味します。

この意味で、iとjは '真'で、kは '偽'です。だから、結果を計算する:

偽= '真' または '真' または '偽' = TRUE = 1

X = '真' と '真' および '偽' = W = 0

= '真' と 'true' または 'false'

Z =真= 1

yが定義されておらず、0又はごみ

--edit--

音符&ことを含むであろう&と||最初の演算子は常に最初に評価されます。

+1

連合性と操作の順序をカバーする必要があります(特にZの場合) –

0

これらは2項演算子であり、2つの引数をとります。より複雑な式に直面すると、バイナリ操作のセットに分解することができます。

たとえば、z = i && j || k;z = ((i && j) || k)と書くことができます。または絵の形で:

z 
    = 
    || 
/\ 
    && k 
/\ 
i j 

ツリーは、我々は演算子の優先順位(または言語の文法規則を)調べるこのレイアウトを持っていることを知るために、ルールはそれは&&||の間で選択することで、||は 'アウター '操作(すなわち、より低い優先順位)。

これらの演算子も短絡しますが、この例では関係ありません。

したがって、i && jは、ijの両方がゼロでないため、1となります。 1 || kは、オペランドの少なくとも1つが非ゼロであるため、1となります。 Finaly 1zに割り当てられます。

あなたは状況がa && b && cあり、同様||のためのとき一番左の&&は、内側の一つであることを優先規則を使用して、同様の方法でwxのための正しい値を見つけることができます。