はい、それは2つの違いです。
a
がゼロ以外の場合は!!a
は1
であり、a
が0
の場合は0
です。
!!
は、いわば{0,1}
へのクランプと考えることができます。私は個人的に、その使用法が派手に見える悪い試みだと思っています。
あなたはそれをこのように想像することができます:
!(!(a))
あなたがそれを段階的に行うならば、これは理にかなっています
result = !42; //Result = 0
result = !(!42) //Result = 1 because !0 = 1
これにより、任意の数値(-42、4.2fなど)で1
が返されますが、0
でのみ、これが発生します。
result = !0; //Result = 1
result = !(!0) //result = 0
あなたが正しい。それは2つの違いです。これを行う理由を確認するには、次のコードを試してください。
#include <stdio.h>
int foo(const int a)
{
return !!a;
}
int main()
{
const int b = foo(7);
printf(
"The boolean value is %d, "
"where 1 means true and 0 means false.\n",
b
);
return 0;
}
The boolean value is 1, where 1 means true and 0 means false.
を出力しますが!!
を落とすとThe boolean value is 7, where 1 means true and 0 means false.
を出力します