C++ 在if语句之外使用==吗?

C++ 在if语句之外使用==吗?,c++,c,C++,C,我只见过在if语句中使用“==”。那么“==”在这种情况下是如何工作的呢 a = 5; b = (a == 18 % 13); 如果b是bool,则可以将表达式的结果分配给它。在这种情况下,如果条件a==18%13保持不变,b将变为true,否则false 基本上 a == 18 % 13 - would yield b = true or b = 1 及 这取决于b的类型 a == 18 % 3 相当于 a == (18%3) 因为模数运算符%的优先级高于相等运算符= 此表达式的计算结

我只见过在if语句中使用“==”。那么“==”在这种情况下是如何工作的呢

a = 5;
b = (a == 18 % 13);

如果
b
bool
,则可以将表达式的结果分配给它。在这种情况下,如果条件
a==18%13
保持不变,
b
将变为
true
,否则
false

基本上

a == 18 % 13 - would yield b = true or b = 1

这取决于
b

的类型

a == 18 % 3
相当于

a == (18%3)
因为模数运算符
%
的优先级高于相等运算符
=


此表达式的计算结果为
true
false
(在本例中,实际上是
true
)。因此,您将该结果分配给变量
b
<代码> B<代码>本身可以是<代码>布尔O/COD>或任何可以从代码> BoOL 转换的任何东西。

< P> C和C++不是高级的。它们没有真正的布尔类型(尽管在C++和C99中有一些类型的DIDEFS,它们提供一些小宽度整数类型来充当布尔),所以任何非零整数、浮点或指针值都被当作布尔真和零作为false。因此,逻辑表达式的计算结果为1(true)或0(false),因此可以分配给整数。

好的,让我们将其分解

问题是:

a = 5, b=(a==18%13); // What is b?
我们将从括号开始。%被称为模数运算符,它给出了两个数除后的余数。所以18/13给你1个余数5。因此:

18%13 = 5;

// so now we have
b=(a==5);
现在,等价运算符==只能返回true或false、1或0。这与询问左操作数是否等于右操作数相同。在这种情况下:

 5 == 5; returns true or 1;

因此b=1

它将简单地计算为一个布尔值,因此b将包含0或1,具体取决于a。您的两个引号不匹配:
18%13
18%3
不相同。@YefimDinitz-我相信b将是零或非零,B是非零的,但是我不知道C++是否强迫BoL进入0和1。我建议你在一些基本的C或C++教程中深入挖掘一点,这是非常基础的。@杰奎林:C和C++中,真实的东西是代码> 1 < /CUT>作为整数,没有任何其他的值。因为:< C++中的代码>布尔< <代码>由<代码> > 1代码> > <代码>真< /代码>和<代码> 0代码> > <代码> false >代码>,表达式相当于<代码>(0% 3)< /代码>。抱歉,键入两个都应该是13@LuchianGrigore哦,他抓到我了:)@kylemorgan49如果是13,那么是真的。如果是3,则为false。
b
不必是
bool
。它是运算符
==
(以及其他关系/比较运算符)和运算符
的结果类型为
bool
。只要<代码> b <代码>可以赋值为type <代码>布尔O/COD>,它就可以正常工作。+ 1用于提到优先规则,其中C++有一个加载项。一句话:永远不要按照问题中的方式编写代码。我的规则:每个人都知道乘法和除法比加法和减法更重要。
a*b+3
不需要括号,但空格确实有用:
a*b+3
。括号是强制性的,包括“代码> a= 18% 13”/> >。DavidHammen完全同意,我必须承认我必须查一下这个案例的规则来确定我的答案。我没有投票,但我怀疑这是因为C和C++中都有布尔类型。在C++的C++代码中,尽管这是一个STDBOOL中的“代码> Boo.<代码”,而它的代码< > BoOL <代码>在C++中。@亚历克斯没有真正的布尔类型“试图将一个整数填充到C代码中,或者BoOL 或C++<代码> BoOL < /C> >将导致它被截断到1或0。标准保证这两种布尔类型始终为1或0。这是错误的;C和C++都有真正的布尔类型
 5 == 5; returns true or 1;