電算機概論

      在〈電算機概論〉中尚無留言

電算機概論

2進位轉10進位

假設有一組二進位數字 1 0 1 1 1 0 0 1,要將此數字轉成10進位,則在每個二進位的下方,註記 20、21 …., 然後將其值與2進位每格數字相乘,再加總。

1 0 1 1 1 0 0 1
27 26 25 24 23 22 21 20
128 0 32 16 8 0 0 1

由上表可知, 27*1=128, 25*1=32, ……所以 128+32+16+8+1=185

因此 10111001的十進位就是185

10進位轉2進位

比如一個十進位數字 185,只要使用如下方式一直除以2,直到結果為 1 為止,然後由下方往上方列出餘數就是二進位  1 0 1 1 1 0 0 1。

dtob

位元與位元組

1 個二進位稱為一個位元(bit),八個二進位組合成1 個位元組(byte)。

byte

正負數

使用最前面的 1 個 bit,如果是 0 就表示為正數,如果是1 就表示為負數。

pn

所以只剩下 7 位二進位數,當後 7 位都填為 1 且第 1 位為 0,表示為127,當後 7 位都是1 且第1位為1,則表示為 -1。

max

範圍值

16bit : -32768 ~ 32767

32bit : -21億 ~ 21 億

64bit : -263 ~ 263

冪次方

冪次方是一個神奇的東西,比如 42 = 4*4, 53=5*5*5。

數學上,乘法總是比加法複雜,如果有個方法可以把乘法變成加法來運算的話,這就美滿了。幸運的是,還真的有這種方法。比如 1024*512, 這個要動動筆吧。

1024*512 = 210*29 = 219

上面的指數,直接變成相加的即可。

即然有 53,52,51,那 50 呢? 答案是 1。

那是否有5-1 ?有的,答案是 1/5,5-2 就是 1/25。

小數

二進位的小數和十進位的小數在觀念上完全一樣,必須有一個小數點,小數點的左邊是整數,小數點的右邊是小數,每一位數有它的權重,如下所示 :

number

在電腦裡表達小數的方式有兩種, 一種是定點表示法, 一種是浮點表示法

定點小數表示法(fixed point)

在電腦裡資料以位元來存放,而小數點並不需要真的存放在位元內,我們只要知道哪兩個位元之間是小數點就好了。

使用定點表示法來表達小數時會將小數點都固定在一個地方,而不會變來變去,這也是為什麼要叫做定點小數的原因。

定點小數表示法裡加減法就是二進位的標準加減法,而乘法必須要把小數點移回來。

高階程式語言內一般都不用定點小數表示法,因為定點小數表示法所能表示數字的範圍非常有限,例如上面雙位元組小數點置於第 8 位和第 9 位元之間時,只能表示 0 到 255 之間每隔 1/256 的那些數字而已。這樣子範圍的數字在自然界中應用的機會較小,那為什麼要用這種方式表示小數? 簡單地說就是運算速度較快,定點小數的運算就是標準二進位的運算,因此很簡單,硬體製作起來也很便宜。

十進位的小數使用二進位定點表示法時,可能會有誤差,比如十進位的 0.1 使用二進位表示時是 0.000110011001100110011… 的一個循環小數,以上圖的表示法來說小數以下只能表示八位數,也就是 0.00011001,這個數字和原來希望表示的數字會有一點點的誤差,讓我們把這個數字換回十進位來看看,也就是 1/256 + 1/32 + 1/16 = 25/256 = 0.09765625, 只能很接近 0.1。誤差一定小於 1/256, 而且有一個特性就是實際表達出來的數字的絕對值永遠小於或是等於原來要表達的數字的絕對值。

浮點小數表示法

二進位的浮點小數表示法 (或是浮點數, floating point number) 和我們十進位中常用的科學記號表示法類似。 十進位中我們用10的冪次 (power) 及 0 至 1 之間的小數來表示一個任意的實數,如 12345.6789 可以寫成 0.123456789 * 105。

在二進位中我們一樣可以將一個二進位數字 1101110.11011 表示為 0.110111011011 * 27,這樣的表示法和定點表示法有什麼不同嗎? 這兩個數值的大小當然是完全一樣,但定點小數表示法中我們看到它的缺點是絕對值太大的數字會被截斷(溢位overflow),位數不夠多無法表達大於範圍的數字, 絕對值太小的數 (0.000000001)  也會被截斷 (無條件捨去法truncation) 只能表達近似的值。

🔒 更多內容,請登入會員繼續閱讀。

立即登入

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *