1. 程式人生 > >資料型別轉換(java)

資料型別轉換(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,,所以大家完全可以找個範圍外的數練練手,小陌當了多年的理論黨越來越菜,往往熟習理論只是真正學會的十分之三,會用才是王道,別墮落為小陌這般菜鳥呀!!!
     !!!不要隨意的去使用強制轉換,畢竟它隱含了精度損失的弊端