bool, int, float与零的比较

Posted younger-zhang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了bool, int, float与零的比较相关的知识,希望对你有一定的参考价值。

0. 前言

编程不是单打独斗,而是团队合作.

遵循一定的规则, 可以从程序上提高效率,减少出错的概率, 并不是要我们遵循"标准答案".

活跃的思维和规范的编程风格并不冲突.

 

1. 定义bool型变量flag, 与零值进行比较:

可能的写法:

  • if(flag == 0)
  • if(flag == FALSE)
  • if(flag)

 

在逻辑上, 上面三个都是正确的,而且都可以编译通过. 但是, 第一个会让人误以为flag是整型变量,因为这种写法flag可以与0在数值上进行比较,也可以与其他整型比较,明显暗示了flag是一个整型变量, 或者没法让别人一眼看出来flag是一个bool型变量.第二种写法, 既然有if(flag == FALSE), 那么不可避免会写if(flag == TRUE).TRUE的值是0, 但是FALSE的值呢?并不确定! VC++ 中TRUE的值1, VB中TRUE的值是-1.

正是因为TRUE的值不确定,所以任何比较都不建议与TRUE或者FLASE进行比较.

 

第三种,是推荐的广为认可的, 对bool型变量与零值进行比较的方法.

if(flag), if(!flag)

 

2. 浮点型变量flag与零值比较

可能很多人都知道, 浮点型变量与任何数比较的时候, 都不可以直接比较.

因为浮点数是一种不精确的储存方式.

但是规范的写法是怎样的呢?你不一定写对:

const float EPSINON = 0.00001;

if( (x >= -EPSINON ) && (x <= EPSIONO) )

比较之前首先要设置比较的精度值, 是一个常量;

使用EPSINON可以让你的同事很好地理解你的意图.

 

3. 指针与零值进行比较

这个大家应该都没问题:

if(NULL == flag)

别人一看就知道flag是指针变量, 而且NULL在前防止不小心少些一个=, 变成了赋值,

这样的话你可能检查不出来, 因为flag = NULL 总是为0, 编译不会报错(VS比较智能,可能会报错).

 

以上是关于bool, int, float与零的比较的主要内容,如果未能解决你的问题,请参考以下文章

条件判断语句比较

double类型与零值比较时不能用==和!=,但>=和<=可以吗?

Python学习-数据类型(int;float;bool;str)

pandas 比较引发 TypeError:无法将 dtyped [float64] 数组与 [bool] 类型的标量进行比较

接近零的浮点值会导致被零除的错误吗?

java中的nul与空字符串与零的区别l