int最大值+1为何是-2147483648最小值-1为何是2147483647

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

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

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

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

-2147483647-1=-2147483648;二进制

因为cpu里面存的是补码计算im

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

-1       补码1111 1111 1111 1111 1111 1111 1111 1111新手

获得-2147483648 补码1000 0000 0000 0000 0000 0000 0000 0000cpu

-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最小值

相关文章
相关标签/搜索