C语言中,int的最大值的问题

在C语言中,关于位的运算总是迷迷糊糊的,希望大佬可以指点迷津,非常感谢!
问题:

在int中,因为是32位,所以最大值为2147483647,但是这个最大值是怎么算的呢?

经过我的一番百度后,发现这个是2的31次方减1,理解了他的意思,但是这如果表示成一个二进制的数的话,一个1后面有31个0,但是既然是储存单位的话,不应该是32个1嘛,这样才是最大值的呀!

来个大佬可怜可怜孩子吧
例如,在C语言中,对于int是4 bytes的计算机来说,int的最大值为2147483647,
也就是2的31次方减1,但是在计算机运算中,却可以超过这样的一个值,具体示例
如下:

示例一

结果如下:

结果一

而对于直接使用输出函数的输出,则会发生错误值

int只有32位,但是在运算过程中,超过了32位,怎么保存的呢?例如在本例中Mx是怎么储存的

这是怎么回事呢?

结果为

 

2147483647 = 2的(32-1)次方,首位要表示正负号所以-1

int a = 2147483647;
printf("%d %d", a, a+1);

结果是:2147483647 -2147483648

实际的存储是不会超过32位的, 负数都是以补码的形式存在。百度一下吧。

我个人觉得,在运算过程中,编译器应该只是将其作为数字进行处理。如果用来传参或者赋值等操作,我觉得应该就会报错了吧。。。

等你学了原码,补码,反码,移码你就懂了。。。。。