在此代码中:
int y = 10;
int z = (++y * (y++ + 5));
我所期望的
y++ + 5
由于最里面的括号的优先级,将执行First 。因此,值y
将为11,此表达式的值将为15。然后++y * ()
将被执行。所以12 * 15 =180。所以z = 180
我得到了什么
z = 176
这意味着VM从左到右不遵循操作员优先级。那么我对运算符优先级的理解是错误的吗?
表达式( y *(y + 5)); 将被放置在这样的堆栈中:
1. [++y]
2. [operation: *]
3. [y++ + 5] // grouped because of the parenthesis
结果将按照该顺序执行
1. 10+1 = [11] // y incremented
2. [operation: *]
3. 11+5 = [16] // y will only increment after this operation
该表达式的计算方式为
11 * 16 = 176
从高到低顺序如下: ^ not - (一元运算) * / + - ..(字符串连接) < > <= >= ~= == and or
问题内容: 下面的代码打印出“ 3”,而不是您期望的“ 4”。 我懂 后缀增量发生在加载“ a”的值之后。(见下文)。 我不太明白是为什么。后缀++的运算符优先级高于+,因此它不应该首先执行吗? 问题答案: Postfix 递增变量的值,并 返回递增之前的值 。因此,在您的示例中,返回值将为,当然将为,然后将其赋给。在分配时,已经将to 的值增加了(由于优先),因此将覆盖该增加的值。
通过前面的学习我们知道运算符有不同的类型,当这些不同类型的运算符出现在同一个表达式中时,就必须遵循运算符的优先级来进行运算,才能保证运算的合理性和结果的正确性、唯一性。运算符的优先级决定了表达式中各个部分执行运算的先后顺序。 下表中详细介绍了 C# 中运算符的优先级顺序: 优先级 运算符 名称或含义 使用形式 结合方向 说明 1 [] 数组下标 数组名[整型表达式] 左到右 () 圆括号 (表
运算符的优先级决定了不同的运算符在表达式中计算的先后顺序,下表列出了 MySQL 中的各类运算符及其优先级。 优先级由低到高排列 运算符 1 =(赋值运算)、:= 2 II、OR 3 XOR 4 &&、AND 5 NOT 6 BETWEEN、CASE、WHEN、THEN、ELSE 7 =(比较运算)、<=>、>=、>、<=、<、<>、!=、 IS、LIKE、REGEXP、IN 8 | 9 & 10
所有的数学运算都认为是从左向右运算的, Java 语言中大部分运算符也是从左向右结合的,只有单目运算符、赋值运算符和三目运算符例外,其中,单目运算符、赋值运算符和三目运算符是从右向左结合的,也就是从右向左运算。 乘法和加法是两个可结合的运算,也就是说,这两个运算符左右两边的操作数可以互换位置而不会影响结果。运算符有不同的优先级,所谓优先级就是在表达式运算中的运算顺序。 一般而言,单目运算符优先级较
问题内容: 为什么在Python中没有and运算符? 问题答案: 不是因为它没有道理;而是因为它没有意义。最好将“ x ++”定义为“ x + = 1,求出x的先前绑定”。 如果您想知道最初的原因,则必须浏览旧的Python邮件列表,或者询问那里的某个人(例如Guido),但是在事实成立之后就很容易找到理由了: 与其他语言一样,不需要简单的增量和减量。您不会经常用Python编写东西。相反,你做类