阿花大人_ 2021-03-10 16:43 采纳率: 33.3%
浏览 60

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是怎么储存的

这是怎么回事呢?

结果为

 

  • 写回答

3条回答 默认 最新

  • 猫叔大鸭梨 2021-03-10 18:02
    关注

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

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

    结果是:2147483647 -2147483648

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

    评论

报告相同问题?