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

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

java byte 负值 java中byte的取值范围_取值范围

 

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

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

对于人类来说,我觉得十进制才是我能理解的范畴,所以取值范围我就转化为十进制吧;注(因为第一位为符号位 0正1负)所以取值范围为:11111111~01111111即-127~127。

我擦说好的-128呢?

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

用一个字节(8位)表示出来(2^8=256)),所以有人将其拆开正负各一半,即-128~127(这个是127而不是128是因为0也是正数啊,所以划分后128变127了)。

其实,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。

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