数值在计算机中是通过补码的方式存储的,补码是一种特殊的机器数,通过最高位来确定是否为正数,0代表正数,1代表负数,这儿涉及三个概念,原码,反码,补码;
在计算机中,根据编码的方式不同,每一个字符都有其对应的编码,也有其对应的编码表中的整型位置,每一个位置,对应了一个二进制的表示方式,从而让计算机实现了字符的展示,以上是对应于字符型数据的处理。
对于整型数据,在java中,有五种整型的类型,byte,short,long,int,char。其对应的二进制位数如下表:
数据类型 所占位数
byte 8
boolean 8
short 16
int 32
long 64
float 32
double 64
char 16
以byte类型的真值 ( 带符号为的机器数对应的10进制数值成为机器数的真值 ) 为例子进行原码,反码和补码的讲解,:
原码:符号位加上真值绝对值的二进制表示形式;
反码:正数的反码是其本身,负数的反码是其真值原码的符号位不变,其余取反;
补码:正数的补码是其本身,负数的补码是其反码的最后一位加1。
那么计算机为什么要使用补码呢?
计算机被设计成了只能进行加法运算,减法就是加上一个负数,即: 1-1 = 1+(-1),因为让计算机识别最高的符号位比较麻烦,就验证除了补码的处理方式,很智慧的解决了二进制之间的加减法运算问题。
对于补码,也解决了反码中0有正负0两种情况,同时意味着,0有两种表示方式,这是不合理的,通过使用补码,-0就代表着-128,这样8位二进制就可以多表示了一个最低位的数-128了,一箭三雕,岂不乐哉。