在 C 语言中,0 和 1 是两个整数常量,它们的值分别是 0 和 1。0 和非零是两种布尔值,它们表示假和真。在 C 语言中,任何非零的数值都被视为真值,所以 1 和其他非零数值在布尔上下文中是等价的。但是在数值上下文中,它们是不同的。
例如,如果写:
#include<>
int main()
{
int a =0;
scanf("%d",&a);
if (a == 1)
{
;// do something
}
return 0;
}
那么只有当 a 的值恰好是 1 时,才会执行 do something。
但是如果写:
#include<>
int main()
{
int a =0;
scanf("%d",&a);
if (a) //改变此处的条件判断
{
;// do something
}
return 0;
}
那么只要 a 的值不是 0,就会执行 do something。这里的 a 被隐式地转换为布尔值。
同样地,如果写:
int b = 1 + 1;
那么 b 的值是 2。但是如果写:
int b = !0 + !0;
那么 b 的值是 1。这里的 !0 表示对 0 取反,得到真值 1。然后两个真值相加,得到数值 1。
所以,在 C 语言中,0 和 1 与 0 和非零不是一样的。