与零值的比较

与零值的比较:

1.布尔变量与零值比较

规则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)

if (flag == 1 )

if (flag == FALSE)

if (flag == 0)

2.整型变量与零值比较

规则1.应当将整型变量用“==”或“!=”直接与 0 比较。

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

if (value ==0)

if (value != 0)

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

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

if (!value)

3.浮点变量与零值比较

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

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

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

转化为

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

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

4. 指针变量与零值比较

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

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

if (p != NULL)

不要写成

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

if (p != 0)

或者

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

if (!p)

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-11-09 19:03:23

与零值的比较的相关文章

Matlab - 求数组的零值与过零点索引

function zeroindex=pickzero(x)%找出数组的零值及过零点(正负相交处,可能偏离0)m = length(x);x1=x(1:m-1);x2=x(2:m);indz = find(x==0); %zero pointindzer = find(x1.*x2<0); %negative/positiven=length(indzer);for i=1:n if abs(x(indzer(i)))>abs(x(indzer(i)+1)) indzer(i)=indzer(

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

if语句是C++/C语言中最简单.最常用的语句,然而很多程序员用隐含错误的方式写if语句.本节以"与零值比较"为例,展开讨论. 这里是"零值"而不是"0" 4.3.1布尔变量与零值比较 [规则4-3-1]不可将布尔变量直接与TRUE.FALSE或者1.0进行比较. 根据布尔类型的语义,零值为"假"(记为FALSE),任何非零值都是"真"(记为TRUE).TRUE的值究竟是什么并没有统一的标准.例如Visua

【Go入门教程2】内置基础类型(Boolean、数值、字符串、错误类型),分组,iota枚举,array(数值),slice(切片),map(字典),make/new操作,零值

这小节我们将要介绍如何定义变量.常量.Go内置类型以及Go程序设计中的一些技巧. 定义变量 Go语言里面定义变量有多种方式. 使用var关键字是Go最基本的定义变量方式,与C语言不同的是Go把变量类型放在变量名后面: // 定义一个名称为“variableName”,类型为"type"的变量 var variableName type 定义多个变量 // 定义三个类型都是“type”的变量 var vname1, vname2, vname3 type 定义变量并初始化值 // 初始化

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

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

GO学习笔记 - 变量在定义时没有明确的初始化时会赋值为“零值 ”。

官方教程:https://tour.go-zh.org/basics/12 变量在定义时没有明确的初始化时会赋值为 零值 . 零值是: 数值类型为 0 , 布尔类型为 false , 字符串为 "" (空字符串). 官方示例: package main import "fmt" func main() { //下面声明的变量没有被初始化,但是也具有值,就是默认的零值 var i int var f float64 var b bool var s string fm

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

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

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  语句

Javascript 中的false,零值,null,undefined和空字符串对象

在Javascript中,我们经常会接触到题目中提到的这5个比较特别的对象--false.0.空字符串.null和undefined.这几个对象很容易用错,因此在使用时必须得小心. 类型检测 我们下来看看他们的类型分别是什么: <script type="text/javascript"> alert(typeof(false) === 'boolean'); alert(typeof(0) === 'number'); alert(typeof("")

Golang细节底层挖掘 - 每种零值为 nil 的类型的底层结构

每种零值为 nil 的类型的底层结构(pdf/9-10) 附件列表