計算機中的二進制、八進制、十進制、十六進制


1.1 進制

二進制:逢二進一,數值只有0和1。

八進制:逢八進一,數值有0,1,2,3,4,5,6,7

十進制:逢十進一,數值有0,1,2,3,4,5,6,7,8,9

十六進制:逢十六進一,數值有0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F

1.2 進制轉換

二進制、八進制、十六進制轉為十進制

十進制轉為二進制、八進制、十六進制

1.3 原碼,反碼,補碼

1.3.1 機器數和真值

機器數:一個數在計算機中的二進制表示形式。叫做這個數的機器數。機器數是帶符號的,最高位0表示正數,1表示負數。
示例:
比如10進制中的+3,計算機長度為8位。轉為二進制是0000 0011。
比如-3,轉為二進制是1000 0011。

真值:因為第一位是符號位,所以機器數的形式值就不等於真正的數值。
比如1000 0011,
作為負數可以是-3,作為正數可以說131.
為了區分,將帶符號位的計算數對應的真正的數值稱為機器數的真值。

1.3.2 原碼,反碼,補碼

原碼:就是符號位加上真值的絕對值,即第一位表示符號位,其余位表示值。

+1 = [0000 0001]原
-1 = [1000 0001]原

原碼是人腦最容易理解和計算的表示方式.

反碼:正數的反碼是其本身,負數的反碼是在其原碼的基礎上,符號位不變,其余各位按位取反。

+1 = [0000 0001]原 = [0000 0001]反
-1 = [1000 0001]原 = [1111 1110]反

一個反碼表示的是負數, 人腦無法直觀的看出來它的數值. 通常要將其轉換成原碼再計算。

補碼:正數的補碼是其本身,負數的補碼是在原碼的基礎上,符號位不變,其余各位取反后+1。

+1 = [0000 0001]原 = [0000 0001]反 = [0000 0001]補
-1 = [1000 0001]原 = [1111 1110]反 = [1111 1111]補

對於負數, 補碼表示方式也是人腦無法直觀看出其數值的. 通常也需要轉換成原碼在計算其數值.

於是人們開始探索 將符號位參與運算, 並且只保留加法的方法. 首先來看原碼。計算十進制的表達式: 1-1=0

1 - 1 = 1 + (-1) = [00000001]原 + [10000001]原 = [10000010]原 = -2

如果用原碼表示, 讓符號位也參與計算, 顯然對於減法來說, 結果是不正確的.這也就是為何計算機內部不使用原碼表示一個數.

為了解決原碼做減法的問題, 出現了反碼。計算十進制的表達式:

1-1=0

1 - 1 = 1 + (-1)
= [0000 0001]原 + [1000 0001]原
= [0000 0001]反 + [1111 1110]反
= [1111 1111]反 = [1000 0000]原
= -0

發現用反碼計算減法, 結果的真值部分是正確的. 而唯一的問題其實就出現在”0”這個特殊的數值上. 雖然人們理解上+0和-0是一樣的, 但是0帶符號是沒有任何意義的. 而且會有[0000 0000]原和[1000 0000]原兩個編碼表示0.

於是補碼的出現, 解決了0的符號以及兩個編碼的問題:

1-1 = 1 + (-1)
= [0000 0001]原 + [1000 0001]原
= [0000 0001]補 + [1111 1111]補
= [0000 0000]補=[0000 0000]原

這樣0用[0000 0000]表示, 而以前出現問題的-0則不存在了.而且可以用[1000 0000]表示-128:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM