このシナリオで「if条件」がインクリメント/デクリメント演算子でどのように機能するか理解できません:
#include<stdio.h>
void main()
{
int n=0;
if(n++)
{
printf("C-DAC");
}
else if(n--)
{
printf("ACTS");
}
}
その出力は ACTS です。
IF条件で何が起こっていますか?
このシナリオで「if条件」がインクリメント/デクリメント演算子でどのように機能するか理解できません:
#include<stdio.h>
void main()
{
int n=0;
if(n++)
{
printf("C-DAC");
}
else if(n--)
{
printf("ACTS");
}
}
その出力は ACTS です。
IF条件で何が起こっていますか?
if (n++)
n
がゼロに等しくないかどうかを確認してからインクリメントしますn
else if (n--)
n
ゼロに等しくないかどうかを確認してからデクリメントしますn
あなたの最初のif
ステートメントは真ではありません(n
ゼロであるため)、n
インクリメントされ、else if
ステートメントがチェックされ(n
この時点で1に等しい)、if (1)
真であり、printf("ACTS")
呼び出されます
if(0 ++)==> if(0)else if(1--)==> else if(1)
したがって、ACTSが印刷されます
n++
とはどちらn--
もポストインクリメント/デクリメント操作です。
つまり、変数の値は最初に現在の式で評価に使用され、その後変更されます (つまり、後でインクリメント/デクリメントされます)。
0
ブール式では FALSE を意味します。n
is initialであるため0
、最初のテストはif
失敗し、else
句が評価されます。
その時点n
で1
、n++
最初のテストで
printf("ACTS");
実行されます。
int n=0;
if(n++)
意味: チェックしてから 1 ずつ増やします。
int n=0;
if(++n)
意味: 1 ずつインクリメントしてからチェックします。
int は、ゼロでない限り、常に true を返します。ポストインクリメント演算子 は、チェック後に変数をi++
インクリメントします。i
preincrement 演算子 を使用した場合++i
、インクリメントはチェックの前に行われます。
IF
あなたの部品をチェックしている間、 nの値は「0」です。そして のためi++
、' n ' は1ずつ増加します。したがって、nの値は1です。というわけで、partに入りながら、 nELSE
の値が1なので、 partを実行します。そして、パーツの出力を取得しています。ELSE
ELSE
iは0なので++i
、評価前にi++
インクリメントし、後にインクリメントします
最初に条件をチェックしn != 0
、その後n の値をインクリメントします
++
and演算子は--
値を変更するだけでなく、戻り値もあります。動作は位置によって異なります。++var
増加して増加した値を返しますが、増加var++
して古い値を返します。
コンパイラは、コマンドを左から右に読み取ります。つまり、最初に条件が真か偽かをチェックします
if (n)
その後、インクリメント/デクリメント
n = n +/- 1