• int最大值+1为什么是-2147483648最小值-1为什么是2147483647


    今天一个新手学编程就问到这个问题,很多人第一次学编程肯定会遇到这个问题,大部分都知道是溢出之类的,用源码和补码就很容易说明

    int i = -2147483648 ;这是不允许的 VS里报的错 error C4146 : 一元负运算符应用于无符号类型,结果仍为无符号类型错误,

    那么我们就会想,如果非要用int存 -2147483648那么符号位和数据位共用, int的第一位二进制是符号位0是整数,1是负数

    -2147483647 原码1111 1111 1111 1111 1111 1111 1111 1111

    -2147483647-1=-2147483648;

    由于cpu里面存的是补码计算

    -2147483647  补码1000 0000  0000 0000 0000 0000 0000 0001

    -1       补码1111 1111 1111 1111 1111 1111 1111 1111

    得到-2147483648 补码1000 0000 0000 0000 0000 0000 0000 0000

    -2147483648-1得到2147483647;

    -2147483648 补码1000 0000 0000 0000 0000 0000 0000 0000

    -1      补码1111 1111 1111 1111 1111 1111 1111 1111

    得到     补码0111 1111 1111 1111 1111 1111 1111 1111

    正好是2147483647 最大值

    2147483647+1得到-2147483648;

    2147483647 补码0111 1111 1111 1111 1111 1111 1111 1111

    1      补码0000 0000 0000 0000 0000 0000 0000 0001

    得到      补码1000 0000 0000 0000 0000 0000 0000 0000

    正好是-2147483648最小值

  • 相关阅读:
    leetcode53. Maximum Subarray(动态规划)
    MinGW中没有gdb.exe解决办法
    POJ
    POJ 3614 (贪心)
    bzoj 1057 (悬线法求最大子矩阵)
    bzoj1 218 激光炸弹(二位前缀和)
    POJ 2299(归并求逆序对)
    HDU 1394(归并求逆序对)
    POJ1523 Targin求关节点
    HDU6299 贪心
  • 原文地址:https://www.cnblogs.com/zakers/p/6739708.html
Copyright © 2020-2023  润新知