接触过计算机的人可能都知道计算机的内部只有01二进制,也就是说计算机会通过自己一种方式来将我们的文字转化为01,这些内容我们陆续会在计算机组成和操作系统进行整合学习。下面我们就来探索一下java中的基本数据类型,其中我们将涉及一些二进制码的思考。
java中有四种表示整型的数据类型,其中byte,short,int,long,分别为1、2、4、8个字节。
正如我们的正数包括正整数、0、负整数。同样java的基本整型数据类型也可以表示正负数和0。以byte为例子,8个字节可以表示256,但实际则不然因为最高位是用来表示正负号的,用来表示数值的只有7位,故byte表示的数值范围为-128~127。0的表示方法所有位都是0即可。
也许我们就可以简单的表示正数 8:00001000,那么-8就是10001000。这是我们所谓的原码,由于计算机的加法器机制(也就是说计算机只会做加法运算),我们的原码在计算机运算会出很多的错误。我们便引入了反码,反码运算虽然解决了一些问题但是还是存在错误。
反码:正数的反码还是等于原码。负数的反码就是他的原码除符号位外,按位取反。
补码:1.正数的补码等于他的原码 负数的补码等于反码+1。
2.负数的补码等于他的原码自低位向高位,尾数的第一个‘1’及其右边的‘0’保持不变,左边的各位按位取反,符号位不变。
补码的反码+1=原码
补码-1的反码=原码
补码的存在解决了-0的问题
计算机的数字存储都是以补码形式储存的,计算机仅仅用加法器解决了减法问题。
有趣的是我们用原码的时候:0的表现形式便有了两种:+0:00000000和-0:10000000。计算机是不允许这种情况的发生的。
还需了解请看我的转载博客——原码 补码 反码。
下面我们再介绍了一些浮点型的数据类型——浮点数的基本类型。
float(4字节) 牺牲了精度 1+8+23 容纳int 有精度损失。
double(8字节)1+13+52 容纳int double 精度较高。
精确运算不使用浮点数。
还有char字符型,java的char占了2个字节(与其他语言不同)采用了Unicode编码,采用了十六进制编码。
还有一种布尔型boolean 用于判断true和false,不能够用0和1表示。