このシナリオで「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 を意味します。nis initialであるため0、最初のテストはif失敗し、else句が評価されます。
その時点nで1、n++最初のテストで
printf("ACTS");
実行されます。
int n=0;
if(n++)
意味: チェックしてから 1 ずつ増やします。
int n=0;
if(++n)
意味: 1 ずつインクリメントしてからチェックします。
int は、ゼロでない限り、常に true を返します。ポストインクリメント演算子 は、チェック後に変数をi++インクリメントします。ipreincrement 演算子 を使用した場合++i、インクリメントはチェックの前に行われます。
IFあなたの部品をチェックしている間、 nの値は「0」です。そして のためi++、' n ' は1ずつ増加します。したがって、nの値は1です。というわけで、partに入りながら、 nELSEの値が1なので、 partを実行します。そして、パーツの出力を取得しています。ELSEELSE
iは0なので++i、評価前にi++インクリメントし、後にインクリメントします
最初に条件をチェックしn != 0、その後n の値をインクリメントします
++and演算子は--値を変更するだけでなく、戻り値もあります。動作は位置によって異なります。++var増加して増加した値を返しますが、増加var++して古い値を返します。
コンパイラは、コマンドを左から右に読み取ります。つまり、最初に条件が真か偽かをチェックします
if (n)
その後、インクリメント/デクリメント
n = n +/- 1