bool、int、float、指针变量与“零值”比较的if语句

if语句是C++/C语言中最简单、最常用的语句,然而很多程序员用隐含错误的方式写if语句。本节以“与零值比较”为例,展开讨论。

这里是“零值”而不是“0”

4.3.1布尔变量与零值比较

【规则4-3-1】不可将布尔变量直接与TRUE、FALSE或者1、0进行比较。

  根据布尔类型的语义,零值为“假”(记为FALSE),任何非零值都是“真”(记为TRUE)。TRUE的值究竟是什么并没有统一的标准。例如Visual C++ 将TRUE定义为1,而Visual Basic则将TRUE定义为-1。

假设布尔变量名字为flag,它与零值比较的标准if语句如下:

if (flag)
// 表示flag为真

if (!flag)
// 表示flag为假

其它的用法都属于不良风格,例如:

if (flag == TRUE)      X

if (flag == 1 )   X

if (flag == FALSE)    X

if (flag == 0)   X

4.3.2整型变量与零值比较

【规则4-3-2】应当将整型变量用“==”或“!=”直接与0比较。

假设整型变量的名字为value,它与零值比较的标准if语句如下:

if (value
== 0)

                              _by  吴尚奇

if (value
!= 0)

不可模仿布尔变量的风格而写成

if (value) // 会让人误解value是布尔变量   X

if (!value)   X

4.3.3浮点变量与零值比较

【规则4-3-3】不可将浮点变量用“==”或“!=”与任何数字比较。

千万要留意,无论是float还是double类型的变量,都有精度限制。所以一定要避免将浮点变量用“==”或“!=”与数字比较,应该设法转化成“>
=”或“ <=”形式。

假设浮点变量的名字为x,应当将

if (x == 0.0) // 隐含错误的比较  X

转化为

if ((x>
=-EPSINON) && (x
<=EPSINON))   重要,注意

其中EPSINON是允许的误差(即精度)。

If(a<=0.00001&&
a<-0,00001);

Float,double(32):分2个部分存放数据,整数部分+小数部分

                                  ——by  吴尚奇

4.3.4指针变量与零值比较

【规则4-3-4】应当将指针变量用“==”或“!=”与NULL比较。

指针变量的零值是“空”(记为NULL)。尽管NULL的值与0相同,但是两者意义不同。假设指针变量的名字为p,它与零值比较的标准if语句如下:

if (p ==
NULL) // p与NULL显式比较,强调p是指针变量

if (p !=
NULL)

if(NULL ==
p)

不要写成

if (p == 0) // 容易让人误解p是整型变量    X

if (p != 0)   X

或者

if (p) // 容易让人误解p是布尔变量   X

if (!p)   X

4.3.5对if语句的补充说明

有时候我们可能会看到if
(NULL == p) 这样古怪的格式。不是程序写错了,是程序员为了防止将if (p == NULL) 误写成if (p = NULL),而有意把p和NULL颠倒。编译器认为if (p = NULL) 是合法的,但是会指出if (NULL = p)是错误的,因为NULL不能被赋值。

程序中有时会遇到if/else/return的组合,应该将如下不良风格的程序

if (condition)

return x;

return y;

改写为

if
(condition){

return x;

}

else{

return y;

}

或者改写成更加简练的

return (condition ? x : y);

——by  吴尚奇

分别给出BOOL,int,float,指针变量与“零值”比较的if
语句(假设变量名为var)

解答:

BOOL型变量:if(!var)

int型变量:if(var==0)

float型变量:

const float
EPSINON = 0.00001;

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

指针变量:  if(var==NULL)

剖析:

考查对0值判断的“内功”,BOOL型变量的0判断完全可以写成if(var==0),而int型变量也可以写成if(!var),指针变量的判断也可以写成if(!var),上述写法虽然程序都能正确运行,但是未能清晰地表达程序的意思。一般的,如果想让if判断一个变量的“真”、“假”,应直接使用if(var)、if(!var),表明其为“逻辑”判断;如果用if判断一个数值型变量(short、int、long等),应该用if(var==0),表明是与0进行“数值”上的比较;而判断指针则适宜用if(var==NULL),这是一种很好的编程习惯。

浮点型变量并不精确,所以不可将float变量用“==”或“!=”与数字比较,应该设法转化成“>=”或“<=”形式。如果写成if
(x ==
0.0),则判为错,得0分。

                                          ——by 
吴尚奇

bool、int、float、指针变量与“零值”比较的if语句,布布扣,bubuko.com

时间: 2024-10-10 10:24:34

bool、int、float、指针变量与“零值”比较的if语句的相关文章

&lt;转&gt;零值比较--BOOL,int,float,指针变量与零值比较的if语句

下面这个是我在一本C语言书上看到的题目 写出float类型的变量i和零值比较的语句: if((x >= -0.00001)&& (x <= 0.00001) ) 不可以将浮点变量用"=="或"!="与数字进行比较,应该设法转化成">="或者"<="之类的形式. 这是程序员面试的一道常见题,也是个C++基础问题.若只在大学里看过几本基础的编程入门书,看见这道题可能会觉得奇怪,不就是和0比较

分别给出BOOL,int,float,指针变量 与“零值”比较的 if 语句(假设变量名为var)

BOOL型变量:if(!var) int型变量: if(var==0) float型变量: const float EPSINON = 0.00001; if ((x >= - EPSINON) && (x <= EPSINON) 指针变量: if(var==NULL)

bool、int、float、指针变量与&quot;零值&quot;比较的if语句

bool型数据:if ( flag ) { A;} else { B;} int型数据:   if ( 0 == flag ) { A;} else { B;} 指针变量:   if (NULL == flag) { A; } else {B;} float型数据: #define NUM (0.000001)  if ((flag >= -NUM) && (flag <= NUM)) { A; } else { B;} 原文地址:https://www.cnblogs.com

零值比较--BOOL,int,float,指针变量与零值比

最近好多新东西需要学,好久没有写点什么了,忽然发现一个基础的基础,借来分析一下,共享-(PS:这不是我最近学的重点) 这是一个C++最基础.每个程序员都会碰到的问题.若只在大学里看过几本基础的编程入门书,看见这道题可能会觉得奇怪,不就是和0 比较吗,直接拿出来比就是了,其实不是的(PS:高手可以无视). 首先给个提示:题目中要求的是零值比较,而非与0进行比较,在C++里"零值"的范围可就大了,可以是0.0.0.FALSE或者"空指针". //------------

写出bool,int,float,指针与零值比较的if语句

这个里面float与零值的比较颇有些意思. bool: bool flag; if (flag == true) return; int: int var; if (var == 0) { return; } 指针变量: char *p; if (p == nullptr) { return; } float: float由于精度问题,不能直接与0进行比较,所以就有个允许的范围,在这个范围内我们就认为是相等的,一般是10的-6次方,够小了 在c/c++中有几个已经定义好的精度值,在limit.h

bool, int, float与零的比较

0. 前言 编程不是单打独斗,而是团队合作. 遵循一定的规则, 可以从程序上提高效率,减少出错的概率, 并不是要我们遵循"标准答案". 活跃的思维和规范的编程风格并不冲突. 1. 定义bool型变量flag, 与零值进行比较: 可能的写法: if(flag == 0) if(flag == FALSE) if(flag) 在逻辑上, 上面三个都是正确的,而且都可以编译通过. 但是, 第一个会让人误以为flag是整型变量,因为这种写法flag可以与0在数值上进行比较,也可以与其他整型比较

速战速决 (2) - PHP: 数据类型 bool, int, float, string, object, array

[源码下载] 作者:webabcd 介绍速战速决 之 PHP 数据类型 bool, int, float, string, object, array 示例1.数据类型: bool, int, float, string, objectbasic/type1.php <?php /** * 数据类型: bool, int, float, string, object */ // 布尔类型(true, false 不分大小写) $b = true; if ($b) { echo "true&

与零值的比较

与零值的比较: 1.布尔变量与零值比较 规则1.不可将布尔变量直接与TRUE.FALSE 或者 1.0 进行比较. 根据布尔类型的语义,零值为"假" (记为 FALSE) ,任何非零值都是"真" (记为TRUE) .TRUE 的值究竟是什么并没有统一的标准.例如 Visual C++ 将 TRUE 定义为1,而 Visual Basic 则将 TRUE 定义为-1. 假设布尔变量名字为 flag,它与零值比较的标准if 语句如下: if (flag)  // 表示

BOOL变量 , float变量, 指针变量和整型变量与“零值”比较

BOOL变量 , float变量,  指针变量和整型变量与"零值"比较 例1:写出 BOOL flag 与"零值"比较的 if  语句. 答案: if ( flag ) if ( !flag ) 如下写法均属不良风格: i f ( f l ag == TRUE) i f ( f l ag == 1 ) i f ( f l ag == FALSE) i f ( f l ag == 0) 例2:请写出 float x  与"零值"比较的 if  语句