zoukankan      html  css  js  c++  java
  • 为什么int的最小值绝对值比最大值大1

    转载自 https://www.jianshu.com/p/23a6e3a1098e

    关于int取值范围的疑问

    在Java中int是占4个字节的,意味着它是32位。同时int是有符号的,那就说它最高位不计算在内,可以得出MAX_INT = 01111111111111111111111111111111 恰好等于 2^31 -1

    说法1:

    MAX_INT + 1 = 100000000000000000000 根据int有符号的定义,第一位是符号位,这样看来,这个数值就是 -0 ; 那么我们再来讨论这样一种场景,按照int的第一个位是符号位的说法 MIN_INT=11111111111111111111111111111111,前面我们计算过 31位的全1 = 2^31 -1, 所以MIN_INT=-2^31 + 1. 这应该是正常思路看待int的最大值和最小值的场景.但是我们还有一个-0没有解决,我们按照之前定义的MIN_INT来计算一下MIN_INT-1 = -2^31 + 1 -1 = -2^31. 咦,我们去掉超过的1位,发现它竟然也是 100000000000000000000 和 -0的含义一样 ,所以我们要解决的-0 可以把原来的MIN_INT-1 作为新的MIN_INT! 这样int的取值范围就是 -2^31 到 2^31 -1

    说法2:

    当然,说法1是我发现的一种解释,网上的解释是因为负数在计算机中都是以补码方式存储的,且没有任何正数的补码是 100000000000000000000 ,所以把 -0 看成 int最小值(符号位参与运算).



     
  • 相关阅读:
    java.net.BindException: Address already in use: bind
    修改Oracle 10g Express Edition默认的8080端口
    五虎
    easily add files to META-INF in NetBeans
    http://edu.makery.ch/
    JavaFX 2 Dialogs
    JavaFx版本植物大战僵尸
    CSS样式表——布局练习(制作360网页)
    CSS样式表
    CSS样式表——超链接样式
  • 原文地址:https://www.cnblogs.com/zhengxq21/p/10348336.html
Copyright © 2011-2022 走看看