在C语言中0.0、false、\0、NULL是于0相等的吗?
1. 0.0与0的比较
首先便是浮点0于0的比较,由于浮点数在存储的时候会丢失精度所以不可以直接于0经行比较
这毫无疑问是相等的
2. bool类型中false与0的比较
bool类型中false表示假true表示为真
而在计算机语言中0为假,那么这里的false与0是相等的吗?
我们可以用if语句来判断一下false是否等于0
这里指的注意的是在C99标准中C语言引入bool类型,要使用它需要头文件<stdbool.h>
发现false与0值是相等的,转定义后发现C语言中false的本质就是0
3. '\0'与0的比较
\0是字符串的结束标识,我们经常能听到\0的本质就是0,可事实真的如此吗?\0真的等价于0吗?
经过验证发现\0确实等价于0,可为什么呢?
在ASCLL表中我们发现\0的ascll码值就是0,只不过在0在转义字符中被解读成了‘\0’,'\0'它的本质依旧是0。所以用if进行比较时才会相等。
4. NULL与0的比较
NULL在C语言中表示”空值“,那它NULL也与0像等吗?
经过对比NULL也于0相同,转到定义发现NULL的本质就是0强转成了void类型
它们真的是相等的吗?
可它们真的是相等?
数据在内存中是以二进制补码的形式存储的,它们的本质都是二进制的0被解读成了其他类型而已。可以说它们的二进制补码是相同的,但严格来说它们是不同的类型不能经行比较
如:字符0于数字48它们的二进制补码都是110000,所以if语句才会判定其相等