int i=1,j=2,k=3; i-- && ++j || --k; 注意运算符的优先级,例如&&和||谁的优先级高,对于&&和||更要注意短路规则!! i的值是 _______ j的值是 _______ k的值是 _______ (3分) 我的答案: 1 3 2 实际得分:1分 正确答案: 0 3 3
时间: 2024-02-29 09:53:02 浏览: 28
运算表达式 `i-- && ++j || --k` 的计算过程如下:
- 先计算 `i--`,其值为 1,然后将 `i` 的值减 1,即 `i` 的值变为 0。
- 因为 `i--` 的结果为真,所以继续计算 `++j`,将 `j` 的值加 1,变为 3。
- 接着计算 `||` 运算符,因为前面的表达式结果为真,所以不再计算后面的表达式,直接返回真。
- 最后 `k` 的值减 1,变为 2。
因此,表达式的值为真,`i` 的值为 0,`j` 的值为 3,`k` 的值为 2。答案为:
```
0
3
2
```
相关问题
int i=1,j=2,k=3; if(i++ ==1 && (++j==3 | k++==3)) System.out.println i+","+j+","+k);
&& j==2 || k==3)
This expression will evaluate to true because of the use of logical operators.
The expression is checking if i is equal to 1 AND (j is equal to 2 OR k is equal to 3).
Since i is indeed equal to 1 and j is also equal to 2, the first part of the expression evaluates to true.
Therefore, the overall expression will be true because of the use of the OR operator.
main() { int i = -1, j= -1, k = 0, l = 2; m = i++ && j++ || l++ && k++; printf("%d %d %d %d %d", i++, ++j, k, l, m); } 这段代码输出什么,并详细介绍
这段代码的输出结果是:0 0 0 3 0
让我们逐行分析这段代码:
- `int i = -1, j= -1, k = 0, l = 2;` 这行代码声明了四个整型变量 i、j、k、l,并分别初始化为 -1、-1、0、2。
- `m = i++ && j++ || l++ && k++;` 这行代码是一个复合赋值表达式,使用了逻辑运算符。逻辑与运算符 `&&` 和逻辑或运算符 `||` 都是短路运算符,即当左侧表达式可以确定整个表达式的结果时,右侧表达式不会被执行。根据运算符优先级,逻辑与的优先级高于逻辑或。因此,这个表达式可以拆解为两个子表达式:`m = i++ && j++` 和 `l++ && k++`。
- `i++ && j++`:根据逻辑与运算的规则,如果左侧表达式 `i++` 的结果为真,则会继续执行右侧表达式 `j++`,并且整个表达式的结果为真。否则,整个表达式的结果为假。在这个表达式中,`i++` 的结果为真(非零值),所以 `j++` 会被执行。然而,`j` 的值为 -1,自增操作 `j++` 并不会改变 `j` 的值,所以 `j` 仍然是 -1。整个子表达式的结果为真。
- `l++ && k++`:根据逻辑与运算的规则,如果左侧表达式 `l++` 的结果为真,则会继续执行右侧表达式 `k++`,并且整个表达式的结果为真。否则,整个表达式的结果为假。在这个表达式中,`l++` 的结果为真(非零值),所以 `k++` 会被执行。`k` 的值为 0,自增操作 `k++` 会将 `k` 的值增加为 1。整个子表达式的结果为真。
- 根据逻辑或运算的规则,如果两个子表达式中至少有一个为真,则整个表达式的结果为真。否则,整个表达式的结果为假。因为第一个子表达式和第二个子表达式都为真,所以整个表达式的结果为真。
- `m` 被赋值为整个表达式的结果,所以 `m` 的值为 1。
- `printf("%d %d %d %d %d", i++, ++j, k, l, m);` 这行代码使用了 `printf` 函数来输出变量的值。 `%d` 是格式化字符串,用于输出整型变量。参数依次为 `i++`、`++j`、`k`、`l`、`m`。注意,`i++` 和 `++j` 都是后置自增操作,所以它们的值在被输出后才会自增。
- `i++` 的值为 -1,然后 `i` 自增为 0。
- `++j` 的值为 -1,然后 `j` 自增为 0。
- `k` 的值为 0。
- `l` 的值为 3,因为在前面的表达式中,`l++` 被执行了两次,所以 `l` 的值增加了 2。
- `m` 的值为 1。
因此,最终的输出结果为 `0 0 0 3 0`。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)