数据类型转换(java)

  • 默认转换(从小到大 /*联想式理解:从弱变强 因为代码的世界是正能量的,所以可以默许蜕变得原来越好哇*/

     byte(1),short(2),char -> int(4) -> long(8) ->float(4) -> double(8)

问题来了,4个字节的float存8个字节的long???小陌又耍智障了叭!!!

这里就有个小知识点啦:

  1. 浮点型采用科学计数法,整型采用补码形式,两者的存储结构不同,所以直接比较是不对的哦。方法展开见下详述(选读即可):

float类型数字在计算机中的存储遵循IEEE—754格式标准:一个浮点数由底数m和指数e两部分组成。
①底数部分:使用二进制数来表示浮点数的实际值
而指数可正可负,Therefore,IEEE规定,此处算出的次方必须减去127才算真正的指数。
②指数部分:占用八个字节的二进制数,可表示0~255的数值范围
底数部分实际是占用24字节的一个值,但是最高位始终为1,因而最高位省去不存储,在存储中占23字节
格式:
    SEEE EEEE EMMM MMMM MMMM MMMM MMMM MMMM
    PS:其中S表示浮点数正负
        E指数 加上 127后的 值 的 二进制数据
        M底数
eg:10.625在内存中的存储
首先要把10.625换算成二进制:1010.101
    ①整数部分:二进制
    ②指数部分:乘以2,直到乘位0,进位按顺序取

  1. 从第一点的知识基础上,我们可以明确float表示的数据范围比long的范围要大
  • ①boolean类型不能转换为其他的数据类型

       ②byte,short,char相互之间不转换,如果他们参与运算呀,就先转换为int

  •  字符串类型与其他类型进行字符串连接+时,结果是字符串类型

进行运算时,讲究个“先入为主”

eg:

System.out.println("aha"+'a'+1);
System.out.println(1+'a'+"aha");

System.out.println(5+5+"=5+5");
System.out.println("5+5="+5+5);

  • 数据溢出的情况下 进行强制类型转换

知识补充:原码补码反码之间的三角关系
    原码:对应数字的二进制
    反码:原码中的1变0,0变1,搞定
    补码:反码末尾加一

eg:(byte)129 ==?
     ①计算机中通过数据补码形式进行运算
     ②明确:byte只占一个字节,8位
            而int占四个字节,32位
     ③整形129的补码(当然啦,作为正数,原码补码反码都是一样的): 00000000 00000000 00000000 10000001
      做截取操作,截成byte类型,保留八位:10000001
      那么再通过已知补码还原出原码就是下一步的工作咯
      反码(把那个1再减回来):10000000
      原码(1变0,0变1):01111111
      其中,0位符号位(符号位上0代表负号,1代表正号)
      1+2+4+8+16+32+64=127
      锵锵锵,所以(byte)129为-127
      因为byte的范围是-128~127,,所以大家完全可以找个范围外的数练练手,小陌当了多年的理论党越来越菜,往往熟习理论只是真正学会的十分之三,会用才是王道,别堕落为小陌这般菜鸟呀!!!
     !!!不要随意的去使用强制转换,毕竟它隐含了精度损失的弊端

猜你喜欢

转载自blog.csdn.net/Moliay/article/details/84797963