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: