java基本数据类型取值范围分析

关于java中基本取值范围许多人都了解,可是都是如何计算出来的呢?

首先把查到的基本类型取值范围展示一下:

那么问题来了:例如byte的取值范围如何计算出来的呢?

  按照我们初学者的理解1byte=8bit,也就是说1个字节可以用8位二进制数表示。那么取值范围怎么表示呢?

  对于人类来说,我觉得十进制才是我能理解的范畴,所以取值范围我就转化为十进制吧;注(因为第一位为

  符号位 0正1负)所以取值范围为:11111111~01111111即-127~127。

  我擦说好的-128呢?

  我查看网上的许多人的计算方法总结如下:

  1、因为1byte表示256个数(用一个字节(8位)表示出来(2^8=256)),所以有人将其拆开正负各一半,即

    -128~127(这个是127而不是128是因为0也是正数啊,所以划分后128变127了)。

  2、这个就专业知识要一些了。其实,1111 1111表示的是-1,而不是-128;
    首先,因为要表示出负数,所以它的最高位是符号位。0表示正数,1表示负数;如:
    127是0111 1111这样表示的。-128是1000 0000这样表示的。127后面是-128,最

    大的正数加下来是最小的负数。这就跟钟表一样,12点钟后面是1点中钟一样。
    因为它是用补码的编码方式。

    (下面的看不懂可以直接跳过,或者百度了解之后再看)
    正数的补码就是它的原码,也就是单纯的二进制数。负数的话,看下面例子:
    1111 1111这个二进制串,首先它最高位是1,明确他是个负数。
    那么其余位是111 1111,按位取反得到:000 0000,再加1就是:000 0001
    也就是1,再加上符号位。最终结果是-1。

  3、这个是我比较理解的解释。首先我们对计算机的二进制麻木不堪,还是十进制好一些。

    你可以这样想,第一位符号位我们暂时不去考虑,那么剩下的七位组成的最小值为多少?

    就是000,0000,这时将符号位添加1000,0000不就是最小的数了(因为1是负号啊),

    这时转化为十进制得出-128。

欢迎各位大神能提出更好的理解方案

原文地址:https://www.cnblogs.com/ysj4428/p/6030771.html