不同情况下“零值”比较的写法

一、整形变量与“零值”的比较

自然,if语句中用0和1(非0)就可以进行条件语句的判断。

二、bool变量与“零值”的比较

if()从句中bool变量与零值比较的写法每个人有每个人的不同,那么哪种写法比较好呢?

  • bool bFlag = FALSE;//为什么一般初始化为FALSE 比较好?(由于普遍编译器里的FALSE值都为0,而TRUE值不确定!)
  1. A), if(bFlag == 0); if(bFlag == 1);//bTestFlag 会被误认为整型变量,所以这种写法不好。
  2. B), if(bFlag == TRUE); if(bFlag == FLASE);//FLASE 的值在编译器里被定义为0;但TRUE 的值在Visual C++定义为1,而在Visual Basic中被定义为-1.那很显然,这种写法也不好。
  3. C), if(bFlag); if(!bFlag);//if 语句是靠其后面的括号里的表达式的值来进行分支跳转的。表达式如果为真,则执行if 语句后面紧跟的代码;否则不执行。显然,这种写法很好,既不会引起误会,也不会由于TRUE 或FLASE 的不同定义值而出错。

三、float 变量与“零值”比较
float 变量与“零值”进行比较的if 语句怎么写?

  • float fFlag = 0.0;
  1. A), if(fFlag == 0.0); if(fFlag != 0.0);
  2. B), if((fFlag >= -EPSINON) && (fFlag <= EPSINON)); //EPSINON 为定义好的精度。

哪一组或是那些组正确呢?
float 和double 类型的数据都是有精度限制的,这样直接拿来与0.0 比是不正确的,如:π值四舍五入精确到小数点后10位为:3.1415926536,你拿它减去0.00000000001 ,然后再四舍五入得到的结果还是3.1415926536,EPSINON 为定义的精度,如果一个数落在[0.0-EPSINON,0.0+EPSINON] 这个闭区间内,我们认为在某个精度内它的值与零值相等;否则不相等。扩展一下,把0.0 替换为你想比较的任何一个浮点数,那我们就可以比较任意两个浮点数的大小了,当然是在某个精度内。同样的也不要在很大的浮点数和很小的浮点数之间进行运算,比如:10000000000.00 + 0.00000000001这样计算后的结果可能会让你大吃一惊。所以B选项的写法更好。

四、指针变量与“零值”比较
指针变量与“零值”进行比较的if 语句怎么写?

  • int* p = NULL;//定义指针一定要同时初始化
  1. A), if(p == 0); if(p != 0);//p 容易误会为整型变量,尽管NULL 的值和0 一样,但意义不同。
  2. B), if(p); if(!p);//p 容易误会是bool 型变量,不好。
  3. C) , if(NULL == p); if(NULL != p);//这种写法是怕漏写一个“=”号:if(p = NULL),编译器会认为这个表达式是正确的,但却不是你要表达的意思。所以,非常推荐这种写法。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值