Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/398.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java中算术运算符的优先级_Java_Variables_Operators - Fatal编程技术网

Java中算术运算符的优先级

Java中算术运算符的优先级,java,variables,operators,Java,Variables,Operators,我在读“Java Deitel和Deitel第7版编程”,我看了操作符的优先级,但我有些害怕 作者说,当有一个数学典型表达式,其中有相等优先级的运算符时,运算从左向右运行。例如: System.out.println (a + b + c - d); int x; x = 4 * 4 * 4% 2; 从这个意义上讲,操作是从左到右执行的,然后我在互联网上研究发现“=”操作符是从右到左运行的。例如: System.out.println (a + b + c - d); int x; x =

我在读“Java Deitel和Deitel第7版编程”,我看了操作符的优先级,但我有些害怕

作者说,当有一个数学典型表达式,其中有相等优先级的运算符时,运算从左向右运行。例如:

System.out.println (a + b + c - d);
int x;
x = 4 * 4 * 4% 2;
从这个意义上讲,操作是从左到右执行的,然后我在互联网上研究发现“=”操作符是从右到左运行的。例如:

System.out.println (a + b + c - d);
int x;
x = 4 * 4 * 4% 2;
所有的税都会被罚款,直到我开始进一步调查并编写代码,我突然想到,我写了这个例外:

System.out.println ((4 * 4) + (8 * 8) * (4 * 4) - 16/4);
我的问题是,如果这本书说加法和减法的优先级比其他运算符低,那么如果我把一个典型表达式的值乘以?。让我解释一下:

当我把
(4*4)+(8*8)*(4*4)
加上乘法的值,然后降低运算符的优先级

另一个问题:

如果我有一个例子如下:

System.out.println (a * b * c + d + e + f * g / h);
由于高优先级的操作是按从左到右的顺序执行的,所以当我有时间运行高优先级的操作时,它也是从左到右运行的吗


分配变量值时,优先级较高的运算符是否从右向左关联?

通常,代码总是从左向右读取,但也遵循数学优先级。例如:

(4 * 4) + (8 * 8) * (4 * 4) - 16/4
在这种情况下,数学是这样说的:首先是括号,然后是乘法和除法,然后是加法和减法。然后:

//Parenthesis done
(16) + (64) * (16) - 16/4

//Multiplication and division done
16 + 1024 - 4

//Addition and subtraction done
1036

我会尝试用一些参考资料来回答这个问题,这样你就可以深入到你想要的任何深度。不完全清楚是什么让你困惑

首先,您需要明确赋值运算符(
=
在您的示例中,但它们也包括例如
+=
等)和其他(二进制)运算符(例如
+
-
*
%
等)之间的区别。赋值运算符(如
=
)从右向左求值-即,它们计算运算符右侧的所有值,然后将其赋值给左侧的任何值

对于其他运算符,它们首先应用运算符优先级,然后对具有相同优先级的运算符应用从左到右的操作。有关此问题的优先顺序表和讨论,请参阅。它与您正在使用的书的第1509页上的表格(图A.1)非常相似,但是web教程的解释可能更容易理解。它可以总结为优先顺序,首先作为括号中的表达式应用,然后是后缀,然后是一元运算符(例如,
x++
,然后是
-x
),然后是乘法运算符(
*
\
%
),然后是加法运算符(
+
-
)最后是许多与这个问题没有直接关系的逻辑运算符

最后,本教程包含以下语句

当同等优先级的运算符出现在同一表达式中时,必须有一条规则来控制首先求值的运算符。除赋值运算符外,所有二进制运算符都从左到右求值;赋值运算符从右向左求值

至关重要的是,将重复从左到右的优先级评估,最容易通过一步一步地查看示例来说明:

(4 * 4) + (8 * 8) * (4 * 4) - 16/4
// Found brackets - highest precedence.
// more than one, so evaluate left to right
16 + (8 * 8) * (4 * 4) - 16/4
16 + 64 * (4 * 4) - 16/4
16 + 64 * 16 - 16/4
//brackets finished, back to precedence.  Found multiplicative operators
//evaluate left to right
16 + 1024 - 16/4
16 + 1024 - 4
//multiplicative finished, back to precedence.  Found additive operators
//evaluate left to right
1040 - 4
1036
// Expression fully evaluated. Can now be used / assigned to a variable

补遗
表达式计算的最终规范见。在这个层次上,它可能更令人困惑,而不是有用,但为了完整性,我将其包括在内。处理表达式和运算符优先级周围的括号(偏执)问题。

我不明白你在问什么。你是在问
(4*4)+(8*8)*(4*4)-16/4
的结果应该是什么?你为什么不测试一下呢?数学运算符遵循贝德马斯。相等优先级(如+-或*/)从左到右计算
(4*4)+(8*8)*(4*4)
将是
(4*4)+[(8*8)*(4*4)]
,而
[]
发生在第一个
4*4
之后,但在
+
之前,我很抱歉这么说,但你似乎已经通过机械翻译提出了这个问题,很难理解你在问什么。我用过谷歌翻译。不幸的是,我认为谷歌翻译做得不是很好。例如,我认为它在解释中加入了你实际上指的是表达,但即使是以英语为母语的人,我也猜不出其中一些的含义,因此可能无法帮助你消除潜在的困惑