为什么这个数字被检测为bool

本文关键字:检测 bool 数字 为什么 | 更新日期: 2023-09-27 18:13:15

我正在检查值ir是否在0和-0.2之间,如下所示:

float value = -0.1;
if (0 < value > -0.2f) { }

但是我得到错误operator '>' cannot be applied to operands of type 'bool' and 'float'。我知道,我可以用其他方式在if语句中使用&&运算符,但我想知道,为什么它被检测为bool?

为什么这个数字被检测为bool

看看这个:

0 < value > -0.2f

首先对0 < value进行求值,返回bool值,然后尝试将bool与浮点数-0.2f进行比较,因此返回错误,因为这是不允许的。

您想要检查值是否小于和是否大于,所以这就是您想要做的:

if (0 < value && value > -0.2f) { }
float value = -0.1;
if (0 < value > -0.2f) { }

因为你需要分离比较

大多数语言从左到右工作,因此

0 < value 

将首先进行评估。其结果是布尔

现在你的表情读作

boolean > -0.2f

这显然是行不通的。你需要

if (0 < value && value > -0.2f)

&amp;是一个"逻辑和",它将逻辑计算的结果组合到的左侧和右侧

这是因为if语句的构造。试试这个:

if (0 < value && value > -0.2f) { }

你写的相当于这个:

if ((0 < value) > -0.2f) { }

正在评估0 < value比较,返回一个布尔值,该布尔值随后成为第二次比较的操作数。而且,正如错误消息所说,您不能使用>来比较布尔值和浮点值。

因为操作顺序

基本上,编译器将if编译成这样:

if ((0 < value) > -0.2f)

并对boolint进行了比较,结果并不理想。

试试这个:

if (0 < value && value > 0.2f)

您的if语句在语法上不正确。它需要大括号之间的布尔表达式。

http://msdn.microsoft.com/en-us/library/vstudio/5011f09h.aspx

if (0 < value > -0.2f) { }

您的语句解析如下:

if ((0 < value) > -0.2f) { }

(0 < value)计算为布尔表达式。您正试图将其与浮点运算进行比较。因此出现了错误。

正如您自己所建议的那样,正常的方法是使用&&