在Java中一共有8種基本數據類型,其中有4種整型,2種浮點類型,1種用於表示Unicode編碼的字符單元的字符類型和1種用於表示真值的boolean類型。(一個字節等於8個bit)
類型 | 字節數 | bit(位)數 | 取值範圍 | 備註 | |
---|---|---|---|---|---|
整型 | int | 4字節 | 4*8 | ||
short | 2字節 | 2*8 | -32768~32767 | ||
long | 8字節 | 8*8 | |||
byte | 1字節 | 1*8 | -128~127 | ||
浮點型 | float | 4字節 | 4*8 | float類型的數值有一個後綴F(例如:3.14F) | |
double | 8字節 | 8*8 | 沒有後綴F的浮點數值(如3.14)默認爲double類型 | ||
char型 | char | 2字節 | 2*8 | ||
boolean型 | boolean | 1字節 | 1*8 | false、true |
二進制是計算技術中普遍採用的一種數制。二進制數據是用0和1兩個數碼來表示的數。它的基數爲2,進位規則是「逢二進一」
注:這裏以1個字節(8位)舉栗子java
在計算機中表示的帶符號的二進制數稱爲機器數
* [+27] 的二進制是 [ 0001 1011 ]
原碼是一種計算機中對數字的二進制定點表示方法。原碼錶示法在數值前面增長了一位符號位(即最高位爲符號位):正數該位爲0,負數該位爲1(0有兩種表示:+0和-0),其他位表示數值的大小。 原碼也是機器數的一種表示方式。
* [+10] = [ 0000 1010 ] * [-10] = [ 1000 1010 ]
由於第一位是符號位,因此機器數的形式值就不等於真正的數值。例如上面的有符號數 10001010,其最高位1表明負,其真正數值是 -10 而不是形式值138(10001010轉換成十進制等於138)。因此,爲區別起見,將帶符號位的機器數對應的真正數值稱爲機器數的真值。
* [+10] = [ 0000 1010 ] ,真值 = [ +000 1010 ] = +10 * [-10] = [ 1000 0001 ] ,真值 = [ –000 1010 ] = –10
正數的反碼與其原碼相同;
負數的反碼是在其原碼的基礎上, 符號位不變,其他各個位取反.
* [+10] 原碼 = [ 0000 1010 ] 反碼 = [ 0000 1010 ] * [-10] 原碼 = [ 1000 1010 ] 反碼 = [ 1111 0101 ]
正數的補碼與其原碼相同;
負數補碼爲其絕對值各位取反加1;
注:java中是以補碼的方式顯示內容算法
* [+10] 原碼 = [ 0000 1010 ] 補碼 = [ 0000 1010 ] * [-10] 原碼 = [ 1000 1010 ] 補碼 = [ 1111 0110 ] * [-10]的補碼算法: 原碼 1 0 0 0 1 0 1 0 反碼 1 1 1 1 0 1 0 1 -------------------- +1 補碼 1 1 1 1 0 1 1 0
正整數的原碼、反碼和補碼都同樣;編碼
負數部分:spa
- 原碼和反碼的相互轉換:符號位不變,數值位按位取反
- 原碼和補碼的相互轉換:負數補碼爲其絕對值各位取反加1;
補碼求原碼:code
- 若是補碼的符號位爲「0」,表示是一個正數,因此補碼就是該數的原碼。
- 若是補碼的符號位爲「1」,表示是一個負數,求原碼的操做能夠是:符號位爲1,其他各位取反,而後再整個數加1。
注:這裏以1個字節(8位)舉栗子it
[8]補碼 0 0 0 0 1 0 0 0 [2]補碼 0 0 0 0 0 0 1 0 + --------------------------- 0 0 0 0 1 0 1 0 得出的二進制爲補碼,轉原碼後轉十進制,的 10
1. 轉換 (-3) + (-2) = -5 2. 求 -3 -2 的補碼 [-3]補碼 1 1 1 1 1 1 0 1 [-2]補碼 1 1 1 1 1 1 1 0 + --------------------------- 1 1 1 1 1 1 0 1 1 3.算出來的是[補碼] 可是溢出了,由於1字節只有8位,則截取8位 後往前截取 1 1 1 1 1 0 1 1 1 0 0 0 0 1 0 1 4.[補碼轉原碼] --------------------------- 1 0 0 0 0 1 0 1 = -5
[-127] 1 0 0 0 0 0 0 1 [-3] 1 1 1 1 0 1 1 0 + --------------------------- 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 1.[補碼轉原碼] 正數的補碼=原碼 --------------------------- 0 1 1 1 0 1 1 1 = 119