• INT_MAX (2147483647) 和INT_MIN (-2147483648)溢出


    c语言中32位int型数据在运算的时候可能会出现溢出的情况,如:

    -2147483648-1会得到什么结果?

    -2147483648乘(-1)会得到什么结果?

    2147483647+1会得到什么结果?

    在编译器中运行一下得到的结果分别是:

    -2147483648-1=2147483647;

    -2147483648乘(-1)=2147483647

    2147483647+1=-2147483648

    下面解释出现这几个情况的原因:

    ①-2147483648的二进制表示为1000 0000 0000 0000 0000 0000 0000 0000,a-1=1000 0000 0000 0000 0000 0000 0000 0000+FFFFFFFF

    很明显,这里会溢出,结果将变为7FFFFFFFF,用int表示就是2147483647。

    ②-2147483648*(-1),对-2147483648按位取反,得到7FFFFFFF就是2147483647。

    ③2147483647的二进制表示为7FFFFFFF,加1之后就变为了80000000,结果就是-2147483648。

    作者:Hahallo
             
    本文版权归作者和博客园共有,未经作者同意不能转载,否则保留追究法律责任的权利。
  • 相关阅读:
    求全排列,调用C++函数
    ZOJ 3508 (the war)
    HDU 1285
    SDUT--枚举(删数问题)
    SDUT--进制转换
    位运算
    [NOI2015]软件包管理器
    列队[noip2017]
    [APIO2007]动物园
    [NOI2001]炮兵阵地
  • 原文地址:https://www.cnblogs.com/bigyang/p/8530304.html
Copyright © 2020-2023  润新知