int最⼩值为何是-2147483648,⽽不是-2147483647
int最⼩值为何是-2147483648,⽽不是-2147483647(-int_max)
【原⽂地址】
⾸先这是针对int占4个字节的情况。
补码的最小负数最⾼位是符号位,1表⽰是负数,0表⽰是⾮负数。
0111 1111 1111 1111,这是int_max,可能我们就会想为什么最⼩值不是-int_max呢?
因为计算机是以补码的形式来存储数字的,不管-0还是+0,补码都是0000 0000 0000 0000,
这就造成了没有任何⼀个数的补码是1000 0000 0000 0000,所以就可以把这个补码⽤来存储⼀个数(不要浪费资源嘛),就规定⽤它来存储-(int_max+1),所以int最⼩值是-2147483648,即 1000 0000 0000 0000。
【拓展】:
因此我们也发现,2147483647 + 1会溢出变成-2147483648
因为2147483647 补码是:0111 1111 1111 1111 1111 1111 1111 1111
加1之后补码就变成了:1000 0000 0000 0000 0000 0000 0000 0000
这正好就是-2147483648的补码
所以在int中⽤于正数表⽰的有31位,能表⽰的数就是2^31 = 2147483648个
加上0之后的话,最⼤值就只能到2147483647
同理负数也有31位的空间去表⽰
只能表⽰2147483648这么多个数,因为-0不需要表⽰,所以负数就多出⼀个数可以表⽰
就⽤这个多出来的表⽰-2147483648
所以java中int能表⽰的最⼤值就是2147483647
能表⽰的最⼩值是-2147483648
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论