博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
《好学的C++程序设计》——1.1 计算机怎样计数
阅读量:6069 次
发布时间:2019-06-20

本文共 1698 字,大约阅读时间需要 5 分钟。

本节书摘来自异步社区出版社《好学的C++程序设计》一书中的第1章,第1.1节,作者: 张祖浩 , 沈天晴,更多章节内容可以访问云栖社区“异步社区”公众号查看。

1.1 计算机怎样计数

好学的C++程序设计

1.1.1 乒乓球场上的计分牌

我们知道,乒乓球球场上的计分牌有0、1、2、3、4、5、6、7、8和9,共10种牌。计分时,逢十进一,叫做十进制。平常我们用的就是。

我们设想,如果计分牌不是10种,而是0和1两种牌。那该怎么计分呢?那只能逢二进一了,这叫作“二进制”。计算机内部用的是二进制。

我们再设想,如果计分牌有0、1、2、3、4、5、6、7、8、9、A、B、C、D、E和F,共16种牌,其中A、B、C、D、E依次代表10、11、12、13、14和15。计分时,逢十六进一,这叫作十六进制。

3种方法的计分情况,见表1-1。从表中可看出,4位二进制数相当于1位十六进制数,它俩一个个相互对应。计分至15时,二进制1111与十六进制F相对应。此时,如果各再增1分,则二者都同时向高位进位,分别进位成为10000和10。这进位的1分是顶十进制16分的。

image

如果用二进制计分牌计分和进位,最后的得分为11101101101101,则表示十进制是多少分呢?我们可从右至左,每4位用一空格隔开,得:0011 1011 0110 1101,分别写出它们所对应的十六进制数得:3 B 6 D。

3B6D是4位十六进制数。此数的每一位满16都要向高位进位。最低位的1分顶1分;高1位则是1分顶16分;高两位则1分顶16×16分;高3位则1分顶16×16×16分……可按此规律,计算得分如下:

十六进制数3 B 6 D = 3×16×16×16 + B×16×16 + 6×16 + D

=12288+11×16×16+96+13=15213(此即十进制得分)

1.1.2 二进制怎样表示全正数和正负数

将表1-1中4位二进制数的全部16个数围成一圈,如图1.1所示。我们设想,在图中A点处把圆周剪开,然后把圆周拉直,竖立起来如图1.2所示。在此图中表示了与十进制数0~15相对应的全正数的4位二进制数。那么,要表明负数怎么办?

如果我们在图1.1中的B点处把圆周剪开,然后把圆周拉直,竖立起来如图1.3所示。此图的上半部0000~0111表示了十进制的正数0~7,下半部1000~1111则表示了十进制的负数−8~−1。这样看来,对于有正负的二进制数,其最高位为0者为正数,最高位为1者为负数。从最高位就能判别数的正负,因此,对于有正负的二进制数,其最高位就被称之为符号位。符号位如图1.3中所示。

image

image

image

图1.3 有正负4位二进制数

读者会问,图1.3中,0000以下的数分明比上半部的数更大,为何反说是负数呢?我们可认为,这些数个个都背了一笔巨债10000(二进制)。因此它们不是“富翁”,而是“负翁”。比如,拿负翁1011来说,负多少?观察可知,若支援它0101,则与1011相加就是10000,就可还清债务啦。可见负翁1011实际是负0101,即负5(十进制)。可见,要问负翁负多少,就看它要还清巨债还差多少。差多少就说明它负多少。

事实上,负数应该是比0000小的数,比如负5,应该由0000-0101计算而得。

image

但不好减而向高位借位,算式变为10000-0101,算得结果为1011。因借位而成为“负翁”。

综上可见,4位二进制数可表示全正数范围为0000~1111,即0~15;正负数范围为1000~0111,即−8~7。对更多位二进制数可作类似分析。比如,8位二进制数全正数范围为00000000~11111111,即0~255;正负数范围为10000000~01111111,即−128~127。

1.1.3 计算机中二进制数怎样存储

计算机内部用二进制表示各种数据,每8位二进制数称为一个字节。计算机数据存储在内存中,内存由一个个内存单元组成。一个内存单元可存储一个字节,即8位二进制数。

本文仅用于学习和交流目的,不代表异步社区观点。非商业转载请注明作译者、出处,并保留本文的原始链接。

你可能感兴趣的文章
开发规范浅谈
查看>>
Spark Streaming揭秘 Day29 深入理解Spark2.x中的Structured Streaming
查看>>
鼠标增强软件StrokeIt使用方法
查看>>
本地连接linux虚拟机的方法
查看>>
某公司面试java试题之【二】,看看吧,说不定就是你将要做的题
查看>>
BABOK - 企业分析(Enterprise Analysis)概要
查看>>
Linux 配置vnc,开启linux远程桌面
查看>>
NLog文章系列——如何优化日志性能
查看>>
Hadoop安装测试简单记录
查看>>
CentOS6.4关闭触控板
查看>>
ThreadPoolExecutor线程池运行机制分析-线程复用原理
查看>>
React Native 极光推送填坑(ios)
查看>>
Terratest:一个用于自动化基础设施测试的开源Go库
查看>>
修改Windows远程终端默认端口,让服务器更安全
查看>>
扩展器必须,SAS 2.0未必(SAS挺进中端存储系统之三)
查看>>
Eclipse遇到Initializing Java Tooling解决办法
查看>>
while((ch = getchar()) != '\n')
查看>>
好程序员web前端分享JS检查浏览器类型和版本
查看>>
Linux 安装oracle内核参数
查看>>
Oracle DG 逻辑Standby数据同步性能优化
查看>>