gpt4 book ai didi

C 中的复合运算符 (+=) 和 &&,奇怪的值

转载 作者:行者123 更新时间:2023-12-04 02:28:01 26 4
gpt4 key购买 nike

查看这段代码:

#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

但是为什么? && 的结合性是从左到右,所以

  1. b = b - 1(a)(b 应该是 251)
  2. 左边部分为真所以:a++ (a = 0)

我的假设有问题,谁能给我解释一下?

如果可以帮助 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);

最佳答案

解释很简单。

a && a++ 是逻辑运算,其结果可以是01。由于 a 不为零,任何非零值都被视为 true,因此此操作的结果为 1

此值添加到 252。显示的结果是 253

关于C 中的复合运算符 (+=) 和 &&,奇怪的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66089157/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com