C语言中数值0和1与布尔值0和非零之间的区别与使用

时间:2025-02-15 12:30:03

在 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 和非零不是一样的。