-
Notifications
You must be signed in to change notification settings - Fork 25
/
ch14s02.html
6 lines (6 loc) · 6.17 KB
/
ch14s02.html
1
2
3
4
5
6
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>2. 不同进制之间的换算</title><link rel="stylesheet" href="styles.css" type="text/css" /><meta name="generator" content="DocBook XSL Stylesheets V1.73.2" /><link rel="start" href="index.html" title="Linux C编程一站式学习" /><link rel="up" href="ch14.html" title="第 14 章 计算机中数的表示" /><link rel="prev" href="ch14s01.html" title="1. 为什么计算机用二进制计数" /><link rel="next" href="ch14s03.html" title="3. 整数的加减运算" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">2. 不同进制之间的换算</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch14s01.html">上一页</a> </td><th width="60%" align="center">第 14 章 计算机中数的表示</th><td width="20%" align="right"> <a accesskey="n" href="ch14s03.html">下一页</a></td></tr></table><hr /></div><div class="sect1" lang="zh-cn" xml:lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="id2753213"></a>2. 不同进制之间的换算</h2></div></div></div><p>在十进制中,个位的1代表10<sup>0</sup>=1,十位的1代表10<sup>1</sup>=10,百位的1代表10<sup>2</sup>=100,所以</p><div class="literallayout"><p>123=1×10<sup>2</sup>+2×10<sup>1</sup>+3×10<sup>0</sup></p></div><p>同样道理,在二进制中,个位的1代表2<sup>0</sup>=1,十位的1代表2<sup>1</sup>=2,百位的1代表2<sup>2</sup>=4,所以</p><div class="literallayout"><p>(A<sub>3</sub>A<sub>2</sub>A<sub>1</sub>A<sub>0</sub>)<sub>2</sub>=A<sub>3</sub>×2<sup>3</sup>+A<sub>2</sub>×2<sup>2</sup>+A<sub>1</sub>×2<sup>1</sup>+A<sub>0</sub>×2<sup>0</sup></p></div><p>如果二进制和十进制数出现在同一个等式中,为了区别我们用(A<sub>3</sub>A<sub>2</sub>A<sub>1</sub>A<sub>0</sub>)<sub>2</sub>这种形式表示A<sub>3</sub>A<sub>2</sub>A<sub>1</sub>A<sub>0</sub>是二进制数,每个数字只能是0或1,其它没有套括号加下标的数仍表示十进制数。对于(A<sub>3</sub>A<sub>2</sub>A<sub>1</sub>A<sub>0</sub>)<sub>2</sub>这样一个二进制数,最左边的A<sub>3</sub>位称为最高位(MSB,Most Significant Bit)<a id="id2753371" class="indexterm"></a>,最右边的A<sub>0</sub>位称为最低位(LSB,Least Significant Bit)<a id="id2753383" class="indexterm"></a>。以后我们遵循这样的惯例:<span class="emphasis"><em>LSB称为第0位而不是第1位,所以如果一个数是32位的,则MSB是第31位</em></span>。上式就是从二进制到十进制的换算公式。作为练习,请读者算一下(1011)<sub>2</sub>和(1111)<sub>2</sub>换算成十进制分别是多少。</p><p>下面来看十进制怎么换算成二进制。我们知道</p><div class="literallayout"><p>13=1×2<sup>3</sup>+1×2<sup>2</sup>+0×2<sup>1</sup>+1×2<sup>0</sup></p></div><p>所以13换算成二进制应该是(1101)<sub>2</sub>。问题是怎么把13分解成等号右边的形式呢?注意到等号右边可以写成</p><div class="literallayout"><p>13=((((0×2+1<sub>3</sub>)×2+1<sub>2</sub>)×2+0<sub>1</sub>)×2+1<sub>0</sub></p></div><p>我们将13反复除以2取余数就可以提取出上式中的1101四个数字,为了让读者更容易看清楚是哪个1和哪个0,上式和下式中对应的数字都加了下标:</p><div class="literallayout"><p>13÷2=6...1<sub>0</sub><br />
6÷2=3...0<sub>1</sub><br />
3÷2=1...1<sub>2</sub><br />
1÷2=0...1<sub>3</sub></p></div><p>把这四步得到的余数按相反的顺序排列就是13的二进制表示,因此这种方法称为除二反序取余法。</p><p>计算机用二进制表示数,程序员也必须习惯使用二进制,但二进制写起来太啰嗦了,所以通常将二进制数分成每三位一组或者每四位一组,每组用一个数字表示。比如把(10110010)<sub>2</sub>从最低位开始每三位分成一组,10、110、010,然后把每组写成一个十进制数字,就是(262)<sub>8</sub>,这样每一位数字的取值范围是0~7,逢八进一,称为八进制(Octal)<a id="id2753506" class="indexterm"></a>。类似地,把(10110010)<sub>2</sub>分成每四位一组,1011、0010,然后把每组写成一个数字,这个数的低位是2,高位已经大于9了,我们规定用字母A~F表示10~15,这个数可以写成(B2)<sub>16</sub>,每一位数字的取值范围是0~F,逢十六进一,称为十六进制(Hexadecimal)<a id="id2753528" class="indexterm"></a>。所以,八进制和十六进制是程序员为了书写二进制方便而发明的简便写法,好比草书和正楷的关系一样。</p><div class="simplesect" lang="zh-cn" xml:lang="zh-cn"><div class="titlepage"><div><div><h3 class="title"><a id="id2753538"></a>习题</h3></div></div></div><p>1、二进制小数可以这样定义:</p><div class="literallayout"><p>(0.A<sub>1</sub>A<sub>2</sub>A<sub>3</sub>...)<sub>2</sub>=A<sub>1</sub>×2<sup>-1</sup>+A<sub>2</sub>×2<sup>-2</sup>+A<sub>3</sub>×2<sup>-3</sup>+...</p></div><p>这个定义同时也是从二进制小数到十进制小数的换算公式。从本节讲的十进制转二进制的推导过程出发类比一下,十进制小数换算成二进制小数应该怎么算?</p><p>2、再类比一下,八进制(或十六进制)与十进制之间如何相互换算?</p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ch14s01.html">上一页</a> </td><td width="20%" align="center"><a accesskey="u" href="ch14.html">上一级</a></td><td width="40%" align="right"> <a accesskey="n" href="ch14s03.html">下一页</a></td></tr><tr><td width="40%" align="left" valign="top">1. 为什么计算机用二进制计数 </td><td width="20%" align="center"><a accesskey="h" href="index.html">起始页</a></td><td width="40%" align="right" valign="top"> 3. 整数的加减运算</td></tr></table></div></body></html>