Java基本数据类型与计算机底层二进制

一、数据类型介绍

   Java的数据类型分为:基本数据类型和引用数据类型。
   
   基本数据类型分为:
          
   整数型:byte(字节型)、short(短整型)、int(整型)、long(长整型)
   
   浮点型:float(单精度)、double(双精度)       

   char(字符型)
   
   boolean(布尔型)、

   引用数据类型:对象等等。

二、基本数据类型如何对应到计算机底层

   1.基本数据类型在计算机所占字节:

   byte(1)、short(2)、int(4)、long(8)、char(2)、boolean(1)、float(4)、double(8)

   2.基本数据类型如何转为计算机所需的二进制(补码)

   (1)整数型:(也就是不同进制数向二进制的转换,一般是十进制和二进制的转换,具体规则网上都有,这里举例说明)

   十进制数(int 10)——二进制数(0【符号位】1010)——反码(01010)——补码(01010)——底层存储(00000000 00000000 00000000 00001010)

   十进制数(int -10)——对其相反数(10)的补码取反加一(10110)——底层存储(11111111 11111111 11111111 11110110)

   (2)字符型:(计算机中所有的数据都是以二进制数存储和运算的,为了规定字母、各种字符等使用哪个二进制数表示,美国推出了ASCII编码)

   也就是说,字符型数据在转为二进制时,直接依据码表进行,Java中使用Unicode来表示字符。

   补充说明:int 1和byte 1和char '1'的区别(可以看出,计算机底层是依靠存储大小来判断数据类型的)

   十进制数(int 1)——二进制数(0【符号位】1)——反码(01)——补码(01)——底层存储(00000000 00000000 00000000 00000001)

   十进制数(byte 1)——二进制数(0【符号位】1)——反码(01)——补码(01)——底层存储(00000001)

   char '1'——十进制数(49)——二进制数(00110001)——底层存储(00000000 00110001)

   补充:事实上,Java会对byte、short、char型默认强转为int型,也就是会以4个字节(32位)进行存储(正数左补0,负数左补1)——这个默认强转一般发生在运算时,比如(byte)1+(byte)1,而不是说Java中所有的byte、short、char都是4个字节存储

   (3)布尔型:(false的序号为0,true的类型为1)
  
   false——底层存储(00000000)

   (4)浮点型(也称为实型,其十进制表现形式由0-9和小数点组成,其指数形式是由十进制数、阶码标志(e或E)、阶码(只能为整数,可以带符号))

   a.底层存储情况
  
   单精度(4字节)(指数偏移量127):符号域(1)+指数域(8)+小数域(23)

   双精度(8字节)(指数偏移量1023):符号域(1)+指数域(11)+小数域(52)

   指数偏移量解释:以单精度为例,其指数域为8,可表示数字范围为0-255,但有时指数可能为负,这里我们不以0和1来确定政府,而是使用指数域的数字去减去指数偏移量

   小数域:小数点左侧必须为1(也就是1.xxxx,小数点前只能有1,因此往小数域进行保存时会省略这个1,同时不足位右补0),比如单精度的二进制数1001.101进行存储时,不能以10.01101 ×2^2进行存储,
           
                 必须以1.001101 ×2^3进行存储,所以最终存入小数域的为00110100 00000000 0000000               
  
   b.具体转换方法,以百度百科的float9.625为例

   整数部分:9——二进制1001
   
   小数部分:0.625——二进制101(具体转换规则,网上都有)

   所以float9.625的二进制为1001.101,其科学表示方式为1.001101*10^3,二进制存储为0【符号域】0000001 1【指数域】0011010 00000000 00000000 00000000 00000000 00000000 00000000【小数域】 

三、引用类型如何对应到计算机底层

   梳理清楚之后再更新。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值