首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >复合算子(+=)与&& in C,奇异值

复合算子(+=)与&& in C,奇异值
EN

Stack Overflow用户
提问于 2021-02-07 14:41:21
回答 1查看 60关注 0票数 3

看看这段代码:

代码语言:javascript
复制
#include <stdio.h>
#include <stdlib.h>

int main(){
  int a = -1;
  int b = 0xfc; // = 252
  b+=a && a++;
  printf("%d %d\n", a, b);
}

我认为应该是:

代码语言:javascript
复制
0 251

实际上,实际产出是:

代码语言:javascript
复制
0 253

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

  1. b =b- 1 (a ) (且b应为251)
  2. 左部分为真,因此: a++ (a= 0)

我的假设有问题,有人能跟我解释什么吗?

如果可以帮助gdb的输出(具有a和b的观察点):

代码语言:javascript
复制
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);
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-02-07 14:47:25

这个解释很简单。

a && a++是一个逻辑操作,其结果可以是01。由于a是非零的,任何非零的值都被认为是true,所以这个操作的结果是1

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

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66089157

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档