在C语言里,1和0是最基础的整型常量,同时在不同场景下还有不同的特殊含义,理解它们的用法是掌握C语言逻辑和运算的基础。

作为普通整型常量的含义
1和0首先属于整型常量,和2、3、-5这些数值一样,可以直接参与算术运算、赋值操作。比如下面的代码就展示了它们作为普通数值的用法:
#include <stdio.h>
int main() {
int a = 1; // 把整型值1赋值给变量a
int b = 0; // 把整型值0赋值给变量b
int sum = a + b; // 1和0参与加法运算,结果为1
printf("a + b = %dn", sum);
int mul = a * 10; // 1参与乘法运算,结果为10
printf("a * 10 = %dn", mul);
return 0;
}
在这个场景里,1和0就是普通的十进制整数,遵循常规的整数运算规则。
逻辑判断中的真假含义
C语言里没有原生的布尔类型(C99标准之后有_Bool类型,但传统用法更普遍),逻辑判断中默认用0表示假,非0值表示真,而1是最常用的表示真的非0值。
比如在if条件判断、循环条件里,1和0的含义如下:
- 条件表达式结果为0时,判定为逻辑假,对应分支不会执行,循环会终止
- 条件表达式结果为1(或其他非0值)时,判定为逻辑真,对应分支会执行,循环会继续
看下面的示例代码:
#include <stdio.h>
int main() {
int flag = 1;
if (flag) { // flag是1,非0,判定为真
printf("flag为真,执行该分支n");
}
flag = 0;
if (flag) { // flag是0,判定为假,该分支不会执行
printf("flag为真,执行该分支n");
} else {
printf("flag为假,执行else分支n");
}
// 循环场景
int count = 3;
while (count) { // count非0时循环继续,count为0时循环终止
printf("当前count值:%dn", count);
count--;
}
return 0;
}
很多函数也会用返回1表示操作成功,返回0表示操作失败,这也是逻辑含义的常见用法。
位运算和硬件场景中的含义
在嵌入式开发、位运算相关的场景中,1和0常用来表示二进制位的两种状态,比如硬件引脚的高电平和低电平、开关的开和关、某个标志位是否置位等。
比如用位运算操作某个寄存器的第0位:
#include <stdio.h>
int main() {
unsigned int reg = 0; // 寄存器初始值,所有位都是0
// 把第0位置为1,对应操作是或上1(0001)
reg = reg | 0x01; // 0x01是十六进制的1,二进制为0001
printf("置位后reg的值:%un", reg); // 输出1
// 把第0位清零,对应操作是与上~1(1110)
reg = reg & (~0x01);
printf("清零后reg的值:%un", reg); // 输出0
return 0;
}
这里的1和0就代表了二进制位的两种状态,和数值运算的场景区分开。
常见误区说明
需要注意,虽然逻辑判断里非0都表示真,但不要默认所有非0值都等于1。比如下面的代码:
#include <stdio.h>
int main() {
int a = 5;
if (a) { // a是5,非0,判定为真
printf("a为真n");
}
printf("a == 1的结果是:%dn", a == 1); // 5不等于1,表达式结果为0
return 0;
}
这里a的值是5,逻辑判断为真,但a == 1的比较结果是0,不要把逻辑真和数值1完全等同。