天天看點

《數值分析(原書第2版)》—— 0.2 二進制數字

本節書摘來自華章出版社《數值分析(原書第2版)》一 書中的第0章,第0.2節,作者:(美)timothy sauer,更多章節内容可以通路雲栖社群“華章計算機”公衆号檢視。

為了準備下一節中對于計算機算術的詳細研究,我們需要了解二進制數字系統.十進制數字中使用的基數10被替換為2,用于在計算機中儲存數字并簡化計算機中諸如乘法和加法等計算.整個過程颠倒過來,就可以得到輸出的十進制的結果.在本節中,我們讨論二進制和十進制數字轉化的方式.

二進制數字可以表示為:…b2b1b0.b-1b-2…5其中每個二進制數字,或者位,要麼是0要麼是1.基為10的數字等價于…b222+b121+b020+b-12-1+b-22-2…例如,十進制數字4以2為基可以表示為(100.)2,3/4可以表示為(0.11)2.

0.2.1 将十進制轉化為二進制

十進制數字53記作(53)10,用于強調其使用10為基.将一個數轉化為二進制,最簡單的方式是将數字的整數部分和小數部分分别對待.十進制數字(53.7)10=(53)10+(0.7)10,我們将整數部分和小數部分分别轉化為二進制,再把結果組合起來.

整數部分.在将十進制數轉化為二進制數的過程中,将整數連續被2除保留餘數.餘數可能是0或者1,從小數點開始進行記錄(或者更準确地稱作基數(radix))并向左移動.對于十進制數字(53)10,有如下計算53÷2=26 餘1

26÷2=13 餘0

13÷2=6 餘1

6÷2=3 餘0

3÷2=1 餘1

1÷2=0 餘1因而,十進制數可以轉化為二進制數字110101,記做(53)10=(110101.)2.可以檢查一下結果110101=25+24+22+20=32+16+4+1=53.

小數部分.将前面的計算過程反過來就可以将十進制小數(0.7)10轉化為二進制.将小數部分不斷乘2并記錄整數部分,從小數點開始并向右移動.0.7×2=0.4+1

0.4×2=0.8+0

0.8×2=0.6+1

0.6×2=0.2+1

0.2×2=0.4+0

注意到4步之後,整個過程出現重複,并且會以完全相同的形式無窮盡地重複下去.因而(0.7)10=(0.1011001100110…)2=(0.10110)2其中上橫線标記用于表示無窮重複的位數.把兩部分放在一起,我們得到(53.7)10=(110101.10110)260.2.2 将二進制轉化為十進制

把二進制轉化為十進制,最好仍将整數部分和小數部分分别計算.

整數部分.如同前面我們可以簡單地将2的幂疊加得到對應的十進制數.二進制數(10101)2可以簡單計算為1·24+0·23+1·22+0·21+1·20=(21)10  小數部分.如果小數部分有限(有限的以2為基的展開),則以相同方式進行.例如(0.1011)2=12+18+116=111610當小數部分不是以2為基的有限展開時,問題變得複雜.将無窮重複的二進制小數轉化為十進制有不同的方法.一種簡單的方法是利用2乘的平移性質.

例如,将x=(0.1011)2轉化為十進制.把x和24相乘,意味着在二進制中向左平移4位.然後減去原始的x:24x=1011.1011

x=0000.1011相減得到(24-1)x=(1011)2=(11)10然後求解x,找出十進制數,得到x=(0.1011)2=11/15.

另外一個例子,假設分數部分沒立即重複,例如x=0.10101.和22乘平移到y=22x=10.101.y的分數部分,記做z=0.101,如前面所述進行計算:23z=101.101

z=000.101因而,7z=5,y=2+5/7,x=2-2y=19/28為十進制數.為了檢查結果,将十進制數19/28轉化為二進制數,并和初始的x進行比較.

二進制數是計算機計算的基石,但是二進制數字很長并不利于人們了解.有時利用基16可以更加容易表示數字.十六進制數用16個數字0,1,2,…,9,a,b,c,d,e,f表示.每個十六進制數字可以用4位來表示.因而(1)16=(0001)2,(8)16=(1000)2,和(f)16=(1111)2=(15)10.在下一節中,将會描述使用matlab的format hex指令表達機器數.

0.2節習題

1.計算十進制整數的二進制表達.(a) 64 (b) 17 (c) 79 (d) 227

2.計算十進制整數的二進制表達.(a) 1/8 (b) 7/8 (c) 35/16 (d) 31/64

3.将下面十進制數轉化為二進制.用上橫線表示無窮的二進制小數位.

(a) 10.5 (b) 1/3 (c) 5/7 (d) 12.8 (e) 55.4 (f) 0.1

4.将下面十進制數轉化為二進制.

(a) 11.25 (b) 2/3 (c) 3/5 7(d) 3.2 (e) 30.6 (f) 99.9

5.找到π的前15位二進制表達.

6.找到e的前15位二進制表達.

7.将下面二進制數轉化為十進制:

(a) 1010101 (b) 1011.101 (c) 10111.01(d) 110.10(e) 10.110(f) 110.1101(g) 10.0101101(h) 111.1

8.将下面二進制數轉化為十進制:

(a) 11011 (b) 110111.001 (c) 111.001(d) 1010.01(e) 10111.10101(f) 1111.010001