關於補碼的一些相關知識

2022-01-22 13:59:32 字數 1818 閱讀 4858

在計算機系統中,數值一律用補碼來表示和儲存。原因在於,使用補碼,可以將符號位和數值位統一處理;同時,加法和減法也可以統一處理。此外,補碼與原碼的的相互轉換,其運算過程是相同的,不需要額外的硬體電路。

1.正數的補碼

正整數的補碼與原碼相同,ie:+9的補碼是00001001。

2.負數的補碼

求負整數的補碼,原碼符號位不變,先將原碼減去1,最後數值各位取反。(但由於2進製的特殊性,通常先使數值位各位取反,最後整個數加1。)ie: -5的原碼(10000101)→符號位不變(10000101)→數值位取反(11111010)→加1(11111011)

3.0的補碼是唯一的

[+0]補=[+0]反=[+0]原=00000000

[ -0]補=11111111+1=00000000

4.補碼轉化為原碼

已知乙個數的補碼,求原碼的操作其實就是對該補碼再求補碼:

⑴   如果補碼的符號位為「0」,表示是乙個正數,其原碼就是補碼。

⑵   如果補碼的符號位為「1」,表示是乙個負數,那麼求給定的這個補碼的補碼就是要求的原碼。

5.為什麼用補碼儲存

補碼的運算規則可以使加法和減法統一處理。

補碼加法:

[x+y]補 = [x]補 + [y]補  ie,x=+0110011,y=-0101001

[x]原=00110011,[y]原=10101001

[x]補=00110011,[y]補=11010111

[x+y]補 = [x]補 + [y]補 = 00110011+11010111=00001010

補碼減法:

[x-y]補 = [x]補 - [y]補 = [x]補 + [-y]補

1的原碼00000001,轉換成補碼:00000001

-1的原碼10000001,轉換成補碼:11111111

1+(-1)=0

00000001+11111111=00000000

00000000轉換成十進位制為0

6.為什麼16位int是-32768到32767

如果以最高位為符號位,二進位制原碼最大為0111111111111111=2的15次方1=32767 最小為1111111111111111=-2的15次方減1=-32767,此時0有兩種表示方法,即正0和負0:0000000000000000=1000000000000000=0 所以,二進位制原碼表示時,範圍是-32767~-0和0~32767,因為有兩個零的存在,所以不同的數值個數一共只有2的16次方減1個,比16位二進位制能夠提供的2的16次方個編碼少1個。

但是計算機中採用二進位制補碼儲存資料,即正數編碼不變,從0000000000000000到0111111111111111依舊表示0到32767,而負數需要把除符號位以後的部分取反加1,即-32767的補碼為1000000000000001。

到此,再來看原碼的正0和負0:0000000000000000和1000000000000000,補碼表示中,前者的補碼還是0000000000000000,後者經過非符號位取反加1後,同樣變成了0000000000000000,也就是正0和負0在補碼系統中的編碼是一樣的。

但是,我們知道,16位二進位制數可以表示2的16次方個編碼,而在補碼中零的編碼只有乙個,也就是補碼中會比原碼多乙個編碼出來,這個編碼就是1000000000000000,因為任何乙個原碼都不可能在轉成補碼時變成1000000000000000。所以,人為規定1000000000000000這個補碼編碼為-32768。 所以,補碼系統中,範圍是-23768~32767。 因此,實際上,二進位制的最小數確實是1111111111111111,只是二進位制補碼的最小值才是1000000000000000,而補碼的1111111111111111是二進位制值的-1。

static的一些相關知識

關鍵字static是乙個修飾符,其可以修飾一下幾種 1,屬性 2,方法 3,語句塊 4,內部類。static代表的是類相關,static修飾的東西,所有的物件共享 共享同一塊的記憶體區域 其修飾的一些東西放在了static池中 堆記憶體中一塊新的記憶體區域 池雖然是堆裡的一塊區域,但是同堆的最大的不...

關於shell Makefile相關的一些記錄

20130727工作中遇到的問題 問題背景 需要把產品定義標頭檔案裡面的產品定義取出來,然後按照產品定義分模組編譯,shell裡面做的工作主要是從product type.h提出產品的定義,然後把產品定義export到環境變數,供makefile使用,makefile根據產品定義傳各個模組的編譯巨集...

關於IP位址的一些相關知識點

網際網路協議位址,又譯為網際協議位址。標識終端在internet中的訪問位置 寫法ip位址是乙個32位二進位制數 但是用十進位制描述 的位址,由4個8位欄位組成,每個字段之間用點號隔開,用於標識tcp ip宿主機。分類a b c d e 五類範圍 a類範圍 規定第一位取0,其餘為取任意值 0 000...