Java中的8大基本資料型別
基本資料型別的種類和大小、資料在計算機中的存盤形式(二進制補碼)、強制型別轉換在二進制中的原理、字面值的賦值規則和多種資料型別混合計算轉型規則,
1.byte: 位元組型 1個位元組 8位 [-128,127]
2.short:: 短整型 2個位元組 16位 [-2^15,2^15-1]
3.int: 整形 4個位元組 32位 [-2^31,2^31-1]
4.long: 長整形 8個位元組 64位
5.float: 單精度 4個位元組 32位
6.double: 雙進度 8個位元組 64位
7.boolean: 布爾型 1個位元組 8位
8.char: 字符型 2個位元組 16位
注意:
1.在java語言中整數型字面值默認當做int型別,如果想讓整數型字面值被當做long型別,需要在字面值后面添加l/L,一般多用L,

報錯的原因是 自動將字面值當做int型別來處理,而2147483648已經超出了int的范圍,所以需要將它標識為其他的能容納它的型別,

2.強制轉換的原理
以long 型別強制轉換為int型別為例,假設有一個long型別的資料是 00000000 00000000 00000000 00000000 00000000 00000000 00000000 01100100,
將它強轉為int,就是直接將long型別的前四個位元組砍掉,只拿后面的四個位元組,00000000 00000000 00000000 01100100,
所以,強制型別轉換需謹慎,有可能會丟失精度,

上例:解剖 (計算機存盤資料是以二進制補碼的形式存盤 正數的補碼和原始碼相同,負數的補碼 是負數的絕對值對應的二進制碼 對位取反再+1)
2147483648L 的二進制是 00000000 00000000 00000000 00000000 10000000 00000000 00000000 00000000
強制型別轉換后得到的是 10000000 00000000 00000000 00000000 (砍掉前4個位元組)
也就是說 10000000 00000000 00000000 00000000 這是原資料的補碼形式 補碼求原始碼
先減1 01111111 11111111 11111111 11111111
對位取反 10000000 00000000 00000000 00000000
所以原始碼是 10000000 00000000 00000000 00000000 2147483648
而補碼的符號位是1(首位),則表示該資料是負數,所以原資料是 -2147483648
2147483648L是long型別,8個位元組,符號位是0,所以對于long型別來說2147483648L是正數

按道理說整形字面值賦值給byte,大專小需要強制型別轉換,但是編譯通過,而128編譯報錯,說明底層字面值只要在byte范圍內是不需要認為強制型別轉換的,此時要糾正錯誤就需要強制型別轉換,

具體還原程序以及計算結果

char型別嘗試
常見的一些字符的ASCII碼 A-->65,a-->97,數字0-->48(其他數字或字符都是依次遞增)

double和float
帶小數的值默認是double 型別,double型別的字面值賦值給float型別變數,大轉小需要強制型別轉換,所以編譯報錯

解決辦法
1.強制型別轉換為float

2.將字面值標識為float型別

3.八種基本資料型別之間的轉換規則
1、八種基本資料型別除了boolean外,其他的都能相互轉換,
2、小容量可以自動向大容量轉換,即自動型別轉換,容量大小如下
byte<<short(char)<<int<<long<<float<<double

注意:
1、不管浮點型占幾個位元組,其容量都比整形大
2、char和short表示的種類不同,但是char可以取到更大的正整數
3、強制型別轉換慎用,因為有可能會丟失精度
4、當一個整數字面值沒有超過byte,short,char型別的取值范圍時,可以直接復制給byte,short,char型別,此時的轉換機制底層幫我們完成了,目的是方便程式員開發
5、byte,short、char運算時,先轉換成int后,再參與運算,
6、多種資料型別混合運算時,先轉換成參與運算中最大的資料型別后,再進行計算,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/455390.html
標籤:Java
