【Java基礎概括】原碼,反碼,補碼

java的基本類型

在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 + 2 = 10
[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
  • 證實: -3 - 2 = -5
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
  • 證實: -10 - 127 = 119
[-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
相關文章
相關標籤/搜索