C语言if判断是否为0的问题
(2013-03-09 07:31:11)
标签:
it |
分类: 基础知识 |
C语言if判断是否为0的问题
【引用】和零值比较:布尔变量、整型变量、浮点变量、指针变量
1.布尔变量和零值比较
假设布尔变量名字为flag,它和零值比较的标准if语句如下:
if(flag)
if(!flag)
根据布尔类型(boolean)的语义,0为假,任何非零值都是真。
可用TRUE和FLASE来表示”真“和”假“的两个概念。语言实现必须通过可比的值来区分二者,比如0和非0就可以担当此任。但是TRUE的值究竟是什么并没有统一的标准。
所以,不要将布尔变量flag直接与TRUE或者1、-1、0等进行比较。下列if语句都属于不良的用法:
if(flag !=
TRUE)
if(flag ==
TRUE)
if(flag ==
1)
if(flag !=
1)
if(flag ==
0)
if(flag !=
0)
2.整型变量和零值比较
假设整型变量为value,它与零值比较的标准if语句如下:
if(value == 0)
if(value != 0)
不可用模仿bool变量的风格而写成:
if(value)
if(!value)
3.浮点数和零值比较
计算机表示浮点数(float和double类型)都有一个精度限制。对于超出了精度限制的浮点数,计算机会把它们的精度之外的小数部分截断。因此本来不相等的两个浮点数在计算机中就可能变成相等的了。
例如:
const float EPSINON = 0.000001;
在数学上a和b不相等,但是在32位计算机中它们是相等的。
那么如何对两个浮点数进行比较?如果两个同符号浮点数之差的绝对值小于或等于某一个可接受的误差(即精度),就认为它们是相等的,否则就是不相等的。
两个浮点数是否相等正确的比较方式:
同理,浮点数x和零值是否相等的正确比较方式:
虽然不建议直接使用==和!=比较浮点数,但是可以直接比较浮点数谁大谁小,即可将“<”和“>”直接应用于浮点数之间的比较以及浮点数和整数的比较。
例子程序:编译环境VC6.0
****************************************test.c***************************************************
#include
#include
#define EPSILON 0.000000001
int main()
{
}
*************************************************************************************************
运行结果:当精度为小数点后10位,a和b不相等,c和零不相等
指针变量的零值是空值NULL,即不指向任何对象。尽管NULL的值与0相同,但是两者的意义不同。
#ifdef __cplusplus
#define NULL 0
#else
#define NULL ((void *)0)
假设指针变量的名字为p,它与零值比较的标准if语句如下:
if( p == NULL )
if( p != NULL )
而不要写成:
if( p == 0 )
if(p != 0 )
更不要写成:
if( p )
if( !p )