1
int main()
{
    int var1=4, var2=6;
    var2=var2||var1++&&printf("computer world");
    printf("%d%d",var1,var2); 
    getch();
}

印刷された答えは 41です。

質問:
ここでは「コンピューターの世界」を印刷していません。優先順位に従って、&&論理演算子を計算する必要がありますが、ここでの動作はそのようではなく、 の値はvar1そのステートメントの後にインクリメントする必要がありますが、そうではありません。私の予想される答えはcomputer world51です。

4

6 に答える 6

6

それは「優先度」ではなく「優先度」と呼ばれます。また、優先順位は評価の順序と同じではありません。

||and&&演算子はshort-circuitであり、var2 は true と見なされるため (6 は非ゼロであるため)、ポストインクリメント操作も関数呼び出しも評価されません。

于 2013-07-25T05:57:45.813 に答える
1

var2||var1++&&printf("computer world")に評価されます:

var2||(  var1++&&printf("computer world")   )

var2 はゼロではないため、それ以降の部分はすべて||無視されます。

したがって、結果は true です。これは 1 で、var2 に割り当てられます。

于 2013-07-25T06:01:28.343 に答える
1

|| _ 演算子は、最初の値がtrueかどうかをチェックします。true の場合、論理式の 2 番目の部分は評価されないため、printf ステートメントはテキストを出力していません。これは短絡操作と呼ばれます。

以下のコードは、期待される結果を提供します

#include<stdio.h>

int main()
{
     int  var1=4,var2=0;
     var2=var2||var1++&&printf("computer world");
     printf("%d%d",var1,var2); 
     getch(); //remove getch if you are working on gcc 
}
于 2013-07-25T06:00:03.333 に答える
0

これ||は、最初のオペランドが true と評価された場合、それ以上実行されない短絡演算子です。

Sovar2は 1 になり ( var2 は最初は 6 であり、操作は true と評価されるため)、インクリメントは発生しないためvar14 のままです。

于 2013-07-25T05:57:30.070 に答える
0

||はショートカットなので、ステートメントでは次のようになります。

var2=var2||var1++&&printf("computer world");

varの値がtrue と評価されるため6、後者の式var1++&&printf("computer world");は実行されません。

于 2013-07-25T05:58:46.623 に答える