0

i) if(0) とはどういう意味ですか?

どのような出力が得られるかをテストするために使用するたびに、偽の部分が返されます。

真の部分が評価される場合は、if(0 == 0) と同等ですか。

ii) 論理 NOT の結合性 ! 右から左です。

リンク: http://www.liv.ac.uk/HPC/HTMLF90Course/HTMLF90CourseNotesnode94.html

論理演算子のリンクの 2 番目の例:

しかし、「モナド .NOT. を含む 2 つの部分式が最初に効果的に評価されます。左端に .NOT.A が最初に実行され、続いて .NOT.E. が実行されます」という行に従って、左の NOT が評価されます。最初ですが、最初に評価されるのは右側のものです...???

4

3 に答える 3

4

I ) C では、0 は false で、それ以外はすべて true です。したがって、if (0)では、0 は常に false であるため、条件は常に false になり、本体は実行されません。

if (0 == 0)0 は実際には 0 に等しく、式0 == 0は true と評価されるため、 の本体ifが実行されるため、 は完全に異なります。

II ) 演算子の結合性は、同じ優先順位の複数の演算子からあいまいさがある場合に何が起こるかを決定します。たとえば、で何が起こるべきa - b - cですか? b - cを最初に評価する必要がありa - bますか? a = 1、b = 2、および c = 3 の場合、は ですが、-4であるため、それらをどの順序で実行するかは重要です。しかし、減算は左結合であるため、それが最初に評価されることがわかります。そのため、a = 1、b = 2、c = 3 の場合の答えは -4 です。a - (b - c)2(a - b) - ca - ba - b - c

そうは言っても、論理否定演算子の結合性が問題になるケースは考えられず、演算子の結合性は、優先順位の異なる演算子によって区切られた場合に実行される順序を決定しません。

于 2011-11-20T02:22:48.990 に答える
3

i) C では、0 は false を意味するため、if(0)常にelse(if there) にジャンプします。これはif(0==0)、(または単にif(1)) の反対であり、真の部分を実行します。

于 2011-11-20T02:20:56.933 に答える
0

if (0)述語0をバイナリ値として評価します。C のバイナリ値は整数を使用します。0 は false を意味し、0 以外は true を意味します。したがって、0 は常に false と評価されます。

二項演算子の場合、右結合または左結合であることによって、同等に重要な演算子が処理される順序が決まります。減算演算子を考えてみましょう:

37 - 10 - 4

どちら-も優先順位が同じなので、どちらを最初に評価する必要がありますか? -は左結合なので、次のようにします。

(37 - 10) - 4 ==> (27) - 4 ==> 23

-演算子が右結合の場合、次のようにします。

37 - (10 - 4) ==> 37 - 6 ==> 31

等式 ( =) は、等式を連鎖させる可能性があるため、右結合です。だから、私たちが見れば

// a and b are initialized to 0
a = b = 45

どちら=も優先順位が等しいので、右から左に評価して次のようにします。

a = (b = 45) // b receives 45
a = 45       // a receives 45

左右に移動すると、予期しない結果が得られます。

(a = b) = 45 // a receives 0
b = 45       // b receives 45

ただし、単項演算子の場合、順序が問題になるのは、複数の単項演算子が同じ値に影響する場合のみです。たとえば、次のようにします。

char x = 0xFF
bool y = !~x

これらの単項演算子は右結合であるため、次のようにします。

!(~0xFF) ==> !(0x0) ==> true

あなたが示した例では、否定演算子は同じオペランドを持っていなかったため、影響を与えA、 「同等の優先順位」を持っていませんでした。Eしたがって、結合性は適用されません。

于 2011-11-20T02:22:07.243 に答える