先看这篇博客
数据在变量地址的空间表示_咕噜一口温开水的博客-CSDN博客https://blog.csdn.net/qq_47286790/article/details/122822416
一、问题引出
在编写C的时候,我在思考int变量类型有最大值,最大值为2147483647,那么溢出会怎么样?
// 包含一个叫stdio的文件
// std-标准 standard input output
#include <stdio.h>
#include <string.h>
int Add(void) {
int a = 2147483647+ 2147483647;
return a;
}
int main() {
printf("%d\n", Add());
return 0; //返回0
}
打印的是 -2
二、解决问题
计算机的加法是二进制加法,
其实就是原码和补码的问题
111111111111111111111111(二进制) = 2147483647(十进制)
2147483647 + 2147483647(十进制) = 11111111111111111111111111111111 + 11111111111111111111111111111111(二进制)
逢二进一
算出来是 111111111111111111111111111111110
算出来的数是有33位,而int类型数据是32bit位有符号数,溢出的1就是消失了(这和计算机硬件的加法器相关了),最终加出来的二进制数是11111111111111111111111111111110
这个二进制数int类型有符号,也就是负号,算出来是-2