C++和PEMDAS的优先顺序/操作?

  • 本文关键字:顺序 操作 PEMDAS C++ c++
  • 更新时间 :
  • 英文 :


我有一个问题,我找不到答案,我正在寻找一些澄清。

根据我的理解,C++遵循PEMDAS,这是正确的吗?

因此,如果我做类似5/9 * (34/.2),由于括号位于末尾而不是前面,因此很难计算此公式。这是对的吗?

当我做(34/.2) *5/9时,我的公式有效。

任何提示,指针,指导不胜感激。我觉得我真的迷失在这里。

C++运算符优先级 cpp首选项页包含 c++ 中所有操作的顺序。一下子消化有点困难,但对于简单的数学运算,您关心的是行 #5 和 #6。

所以是的,你可以说C++在某种程度上遵循PEMDAS,除了它没有指数运算符(参见std::p ow(。但澄清一下,乘法和除法具有相同的优先级(从左到右评估(,加法和减法(也是从左到右(也是如此

假设你的意思是5/9 * (34/.2)5/9是分数,或者换句话说,(34/.2)不在分母中,理论上5/9 * (34/.2)(34/.2) * 5/9应该评估同一件事,对吧?

他们不这样做的原因是因为整数除法。当你写5/9你应该得到的是 0.555556,但由于 5 和 9 都是整数,/运算符只返回结果的整数部分,在本例中为 0。但是,当您首先计算括号时,首先将整数除以非整数值(在本例中为双精度值(。这将返回一个双精度结果,当乘以 5 时,会得到另一个双精度结果,将其除以 9 不会进行整数除法(因为第一个操作数是双精度数(。

重新澄清错误不是顺序错误,而是因为意外的整数除法。您可以通过将 5 更改为 5.0 来解决此问题。这样,它是一个双精度值,/运算符永远不会进行整数除法。

简单的答案是"是"C++遵循标准的优先级顺序。

我要指出的是,在PEMDAS中,E代表"指数",并且无法表达C++中您需要进行函数调用才能实现它,但其余部分是正确的。

Definition:
P       Parathasis first.
E       Exponent second.
MD      Multiplication and Division third  (have the same precedence)
AS      Addition and Subtraction    fourth (have the same precedence)
MD happen left to right
AS happen left to right

5/9 * (34/.2(

由于括号位于末尾而不是前面,因此很难计算此公式。这是对的吗?

错。上述表达式在数学和C++中都有很好的定义,并且具有相同的含义。

(34/.2( *5/9

我的公式有效。任何提示,指针,指导不胜感激。

这些不是同一个表达方式。乘法和除法具有相同的优先级,并且从左到右应用。您更改了这些运算符的应用顺序。但是你说它们应该是联想的(即顺序并不重要(。这是事实。但是您还必须输入类型信息。容易忘记的一件事是整数除法不是你所期望的(它丢弃了余数(。

版本1:

5/9 * (34/.2)
34/.2   => P1       170.0
5/9     => P2       0      // Integer division
P2 * P1 => P3       0    

版本 2

(34/.2) *5/9
34/.2    => P1      170.0
P1 * 5   => P2      850.0
P2 / 9   => P3       94.4

最新更新