为什么 2147483648 + 2147483648 = 0 在 C 中?

Hos*_*eon 2 c

这是代码:

int a;
a = 2147483648 + 2147483648;
printf("%d", a);
Run Code Online (Sandbox Code Playgroud)

我知道 int 变量的最大数量是 2147483647。所以,据我所知,2147483648 = -2147483648。但为什么 2147483648 + 2147483648 = 0?

Tom*_*ada 5

2147483648 是 1 后跟 31 个零。如果添加两次,它只会溢出(所有 32 位都将为零并设置进位)。由于进位基本被丢弃(忽略,当你将值存入a时),你看不到它,你看到的都是0。

   10000000 00000000 00000000 00000000  
  +10000000 00000000 00000000 00000000  
  ---------------------  
(1)00000000 00000000 00000000 00000000 

  • “携带基本上就被丢弃”是不正确的。`2147483648` 可能是现代系统上的 64 位值,并且“进位”从位 31 转到位 32 (2认同)