看看这段代码:
#include <stdio.h>
#include <stdlib.h>
int main(){
int a = -1;
int b = 0xfc; // = 252
b+=a && a++;
printf("%d %d\n", a, b);
}我认为应该是:
0 251实际上,实际产出是:
0 253但是为什么呢?&的结合性是从左到右,所以
我的假设有问题,有人能跟我解释什么吗?
如果可以帮助gdb的输出(具有a和b的观察点):
Old value = 0
New value = -1
main () at test.c:7
7 int b = 0xfc;
(gdb) c
Continuing.
Hardware watchpoint 2: b
Old value = 0
New value = 252
main () at test.c:8
8 b+=a && a++;
(gdb) c
Continuing.
Hardware watchpoint 3: a
Old value = -1
New value = 0
0x0000555555555172 in main () at test.c:8
8 b+=a && a++;
(gdb) c
Continuing.
Hardware watchpoint 2: b
Old value = 252
New value = 253
main () at test.c:9
9 printf("%d %d\n", a, b);发布于 2021-02-07 14:47:25
这个解释很简单。
a && a++是一个逻辑操作,其结果可以是0或1。由于a是非零的,任何非零的值都被认为是true,所以这个操作的结果是1。
此值将添加到252中。显示的结果是253。
https://stackoverflow.com/questions/66089157
复制相似问题