按照运算符的优先级,有括号先算括号,先执行i++ + 1,结果2,i变成2,在计算i++ * 2,结果4,i变成3,但是实际结果打印3和3,不是3和4,为什么 int i = 1; int j = i++ * (i++ +1)
时间: 2024-04-23 17:22:20 浏览: 9
对于表达式 `int j = i++ * (i++ +1)`,按照运算符优先级和结合性的规则,它的计算过程如下:
1. `i++` 的值是 `1`,同时 `i` 的值自增变为 `2`。
2. `(i++ + 1)` 的值是 `2`,同时 `i` 的值自增变为 `3`。
3. `i++ * (i++ +1)` 相当于 `1 * 2`,结果为 `2`,同时 `i` 的值自增变为 `4`。
4. `j` 被赋值为 `2`。
所以,最终的结果是 `j=2`,而 `i=4`。
注意,如果在打印语句中也使用了自增运算符,可能会对结果产生影响。因为自增运算符的执行顺序和表达式的结合性也会影响到表达式的值和变量的值。
相关问题
按照运算符的优先级,有括号先算括号,先执行i++ + 1,结果2,i变成2,在计算i++ * 2,结果4,i变成3,但是实际结果打印3和3,不是3和4,为什么
这个问题涉及到 Java 中的后缀自增运算符与前缀自增运算符的区别。
在表达式 `i++ + 1` 中,`i++` 是后缀自增运算符,它的执行顺序是先取值再自增,所以表达式的值为 `1 + 1 = 2`,同时 `i` 的值也会自增变为 `2`。
在表达式 `i++ * 2` 中,同样是后缀自增运算符,所以表达式的值为 `2 * 2 = 4`,同时 `i` 的值也会自增变为 `3`。
但是,在打印语句中,`System.out.println(i++ + "," + ++i);` 中的 `++i` 是前缀自增运算符,它的执行顺序是先自增再取值,所以在打印语句中,`i` 的值首先被自增变为 `3`,然后才被打印出来,所以输出的结果是 `3,3`。
因此,对于这个问题,在打印语句中使用了前缀自增运算符,而且后缀自增运算符的执行顺序也需要注意,才能得出正确的结果。
<<跟+=运算符优先级
在C++中,+=是赋值运算符,其优先级较低,比算术运算符的优先级要低。因此,如果一个表达式中既包含+=又包含算术运算符,那么算术运算符会先被计算,然后再执行赋值运算符。
例如,表达式a += b * c会先计算b * c,然后将结果赋值给a。相当于a = a + (b * c)。
如果想要改变优先级,可以使用圆括号明确指定计算顺序,例如(a += b) * c会先执行a += b,然后再将结果乘以c。