|
>a=2;
>if(a)
>は、aが2の時、aを評価したら、非0だったので、「1」となる。
1にはなりません。a = 2; の後aを評価したら2です。
>a=0;
>if(a)
>は、aが0の時、aを評価したら、0だったので「0」となる。
これもa = 0; の後にaを評価したら0でそこで終わりです。
>a=2;
>if(!a)
>は、aが2の時、!aを評価したら、非0を否定するというこなので、
>否定の演算は、0->1に、1->0にしているので、
>「0」となる。
これはその通り。a = 2;の時に!aを評価すると0になります。念のためaは相変わらず2です。
>a=0;
>if(!a)
>は、aが0の時、!aを評価したら、0を否定するということなので、
>否定の演算は、0->1に、1->0にしているので、
>「1」となる。
これもあっています。
以上のことは次のようなコードで確認できます。どのように表示されるか予想して実際の結果と合わせてみてください。
#include <stdio.h>
int main(void)
{
int a;
a = 2;
printf("a : %d, !a : %d, !(!a) : %d\n", a, !a, !(!a));
a = 0;
printf("a : %d, !a : %d, !(!a) : %d\n", a, !a, !(!a));
return 0;
}
|