且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

《数值分析(原书第2版)》—— 0.2 二进制数字

更新时间:2022-10-02 18:53:15

本节书摘来自华章出版社《数值分析(原书第2版)》一 书中的第0章,第0.2节,作者:(美)Timothy Sauer,更多章节内容可以访问云栖社区“华章计算机”公众号查看。

0.2 二进制数字

为了准备下一节中对于计算机算术的详细研究,我们需要理解二进制数字系统.十进制数字中使用的基数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
0.4×2=0.8+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