专栏首页佳爷的后花媛软考准备之计算机系统基础知识(中)

软考准备之计算机系统基础知识(中)

为什么会出这个系列呢?

平时有很多碎片化时间,比如下班的地铁上,或者等待的时间,我们总喜欢拿出手机玩,这个时间也可以用来学习呢,佳爷最近想考考软件设计师,所以把自己准备的过程记录下来,也希望在碎片时间可以复习。

今天来说说数据表示这块,主要包括以下内容:

上述概念大概了解之后,再来说说原码、反码、补码以及如何计算。

原码

原码是一种计算机中对数字的二进制定点表示法。原码表示法在数值前面增加了一位符号位(即最高位为符号位):正数该位为 0,负数该位为 1(0 有两种表示:+0 和 -0),其余位表示数值的大小。举个例子,用 8 位二进制表示一个数,+12 的原码为 00001100,-12 的原码就是 10001100。

原码就是符号位加上真值的绝对值, 即用第一位表示符号, 其余位表示值. 比如如果是8位二进制:

[+1]原 = 0000 0001 [-1]原 = 1000 0001

第一位是符号位. 因为第一位是符号位, 所以8位二进制数的取值范围就是:

[1111 1111 , 0111 1111]

[-127 , 127] 原码是人脑最容易理解和计算的表示方式.

反码

一个数字用原码表示是容易理解的,但是需要单独一个位来表示符号位,并且在进行加法时,计算机需要先识别某个二进制原码是正数还是负数,识别出来之后再进行相应的运算。这样效率不高,能不能让计算机在进行运算时不用去管符号位,也就是让符号位参与运算。要实现这个功能,就要用到反码。

反码的表示方法是:正数的反码是其本身,负数的反码是在其原码的基础上, 符号位不变,其余各个位取反.

[+1] = [00000001]原 = [00000001]反 [-1] = [10000001]原 = [11111110]反 可见如果一个反码表示的是负数, 人脑无法直观的看出来它的数值. 通常要将其转换成原码再计算.

反码是一种在计算机中数的机器码表示。对于单个数值(二进制的 0 和 1)而言,对其进行取反操作就是将 0 变为 1,1 变为 0。正数的反码和原码一样,负数的反码就是在原码的基础上符号位保持不变,其他位取反。

十进制

原码

反码

6

0000 0110

0000 0110

-3

1000 0011

1111 1100

下面来看一下,用反码直接运算会是什么情况,以 6 - 3 为例,6 - 3 等价于 6 + (-3)

6 - 3 ==> 6 + (-3)
  0000 0110 // 6(反码)
+ 1111 1100 // -3(反码)
----------------------
  0000 0010 // (反码)
  0000 0010 // 2(原码)

很明显通过反码进行 6 + (-3) 加法运算时,输出值比预期值差了一个 1。接着再来看下 1 + (-1) 的运算结果:

1 - 1 ==> 1 + (-1)
  0000 0001 // 1(反码)
+ 1111 1110 // -1(反码)
----------------------
  1111 1111 // (反码)
  1000 0000 // -0(原码)

由上可知 1 + (-1) 的运算结果为 -0,而预期的值是 +0。继续看个示例 0 + 0

0 + 0 ==> 0 + 0
  0000 0000 // 0(反码)
+ 0000 0000 // 0(反码)
----------------------
  0000 0000 // (反码)
  0000 0000 // 0(原码)

这里可以知道 -0 对应的原码是 1000 0000,而 +0 对应的原码是 0000 0000。虽然 -0 和 +0 代表的数值是一样的,但是在用原码和反码表示时它们是不同的。通过以上的多个示例,发现使用反码进行加法运算并不能保证得出正确的结果。原因是用一个字节表示数字的取值范围时,这些数字中多了一个 -0。为了解决反码出现的问题,就出现了补码。

补码

补码是一种用二进制表示有符号数的方法。正数和 0 的补码就是该数字本身。负数的补码则是将其对应正数按位取反再加 1。补码系统的最大优点是可以在加法或减法处理中,不需因为数字的正负而使用不同的计算方式。只要一种加法电路就可以处理各种有符号数加法,而且减法可以用一个数加上另一个数的补码来表示,因此只要有加法电路和补码电路即可以完成各种有符号数加法和减法,在电路设计上相当方便。

补码的表示方法是: 正数的补码就是其本身,负数的补码是在其原码的基础上, 符号位不变, 其余各位取反, 最后+1. (即在反码的基础上+1)

[+1] = [00000001]原 = [00000001]反 = [00000001]补 [-1] = [10000001]原 = [11111110]反 = [11111111]补 对于负数, 补码表示方式也是人脑无法直观看出其数值的. 通常也需要转换成原码在计算其数值.

另外,补码系统的 0 就只有一个表示方式,这和反码系统不同(在反码系统中,0 有两种表示方式),因此在判断数字是否为 0 时,只要比较一次即可。下图是一些 8 位补码系统的整数,它可表示的范围包括 -128 到 127,总共 256 个整数。

既然说补码可以解决反码在运算中遇到的问题,继续以 6 + (-3) 为例来验证一下这个结论。

十进制

原码

反码

补码

6

0000 0110

0000 0110

0000 0110

-3

1000 0011

1111 1100

1111 1101

6 + (-3) 以补码形式的计算过程如下:

6 - 3 ==> 6 + (-3)
  0000 0110 // 6(补码)
+ 1111 1101 // -3(补码)
----------------------
  0000 0011 // 3(补码)

很明显这时得到了正确的结果,那么再来看一下以补码形式计算 1 - 1 的计算过程:

1 - 1 ==> 1 + (-1)
  0000 0001 // 1(补码)
+ 1111 1111 // -1(补码)
----------------------
  0000 0000 // 0(补码)

参考文章:

https://segmentfault.com/a/1190000021511009

https://www.cnblogs.com/zhangziqiu/archive/2011/03/30/ComputerCode.html

本文分享自微信公众号 - 佳爷的后花媛(zoe1368329355),作者:仇诺伊

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2021-02-23

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 软考准备之计算机系统基础知识(上)

    其实佳爷对于这些数据表示和校验码,一直都是学的时候懂,关上课本就是马什么梅?哎,头秃,为什么就记不住,而且这玩意学着,大概率是用不上的。但是不管怎样,也是一个新...

    仇诺伊
  • 《软考系统架构师笔记》之计算机系统知识

    运算器功能:执行所有的算术运算,如加减乘除等;执行所有的逻辑运算并进行逻辑测试,如与、或、非、比较、移位等

    ZY_FlyWay
  • 软考第一篇:计算机系统知识

    该篇主要介绍计算机系统的基础知识,体系结构,安全性,可靠性和系统性能测评等。下图是该篇的一个思维导图:

    Java技术编程
  • linux系统编程之基础必备(一):计算机体系结构一点基础知识

    下面这张图来自《深入理解计算机系统》: IO桥部分一般还分为北桥和南桥,北桥当然是靠上的了。 ? •CPU –主频:  CPU的时钟频率,内核工作的时钟频...

    s1mba
  • 计算机理论基础知识-操作系统知识

    刘金玉编程
  • 1.2计算机系统的组成 专业理论是基础,计算机基础知识整理

    本节从计算机系统的组成、工作原理、CPU、存储器输入输出设备、总线组成和类型等方面介绍计算机系统的组成。

    刘金玉编程
  • 2.3计算机系统维护 计算机基础专业理论知识整理

    1.windows自带的磁盘清理、磁盘碎片整理程序、查错程序等系统工具可以对windows操作系统进行简单维护。

    刘金玉编程
  • 计算机基础知识总结与操作系统 PDF 下载

    在前不久的一文中 计算机网络基础知识总结 ,许多读者反馈说希望能有更详细的内容,所以师兄特地花了几天时间整理了相关资料,希望对大家有帮助,都是可以免费获取的:)

    五分钟学算法
  • 计算机基础知识总结与操作系统 PDF 下载

    第一本是程序员必知的硬核基础知识,这是一本非常入门的经典 PDF,看完能让你对计算机有一个基础的了解和入门,是培养你 内核 的基础,我们看下目录大纲

    CDA数据分析师
  • 读完小学生编程考试大纲,不妨重新讨论一下「计算机从娃娃抓起」这件事

    就比如大学生们几乎都参加过的全国计算机等级考试,比如二级 Office 考试,考察的是 Word、Powerpoint、Excel 这种常用软件的操作,但据统计...

    机器之心
  • 信息安全从业者考试认证大全

    证书是IT从业者知识水平能力的一个体现,考证同时也是拓展自身知识的一个方法。近年来,安全行业风生水起,各种认证层出不穷,眼花缭乱。这里不对任何一个证书做评价,只...

    FB客服
  • 1.5微型计算机的操作系统 计算机专业理论基础知识要点整理

    Alt+Esc 系统会按照窗口图标在任务栏上的排列顺序切换窗口,但这种方法只能切换非最小化的串钩,对于最小化的窗口,它只能被激活,不能被放大。

    刘金玉编程
  • 如何准备一线互联网公司面试?

    互联网技术面试的特点 互联网公司的技术面试有一些侧重点,国内互联网公司和外企的侧重点又有不同。BAT 互联网公司看重项目能力,重点考察语言深度和项目能力,国外...

    MickyInvQ
  • 国家五部委联合发布“AI标准顶层设计”:2021年明确、2023年初步建成

    据国家市场监督管理总局消息,8月5日,国家标准化管理委员、中央网信办、国家发展改革委、科技部、工业和信息化部等五个国家部门联合印发了《国家新一代人工智能标准体系...

    AI科技评论
  • 边缘计算面临的问题

    目前边缘计算已经得到了各行各业的广泛重视,并且在很多应用场景下开花结果。根据边缘计算领域特定的特点,本文认为6个方向是未来几年迫切需要解决的问题:编程模型、软硬...

    边缘计算
  • 【RL-TCPnet网络教程】第31章 Telnet远程登录基础知识

    本章节为大家讲解Telnet (Teletype Network) 的基础知识,方便后面章节的实战操作。

    armfly
  • 错过了春招,难道你还不为秋招做准备吗

    如今的校招,像一场突围赛,很多人“牺牲”在前进的路上,那些突围成功的人,不是因为他们刀枪不入,而是他们有扎实的准备,周密的计划以及可圈可点的技巧。

    技术zhai
  • B程序员:讲述三年计算机学习辛酸史

    近年来,有些读者会问我一些形形色色的问题,让我很难去回答,甚至给不出建设性的意见。

    Guide哥
  • 安全从业人员的“奖状”

    证书代表的是一种能力,安全领域也是如此,当然不是每个从业安全领域的人都是有证书的,但是有没有证书在未来的职业发展中会起到绝对重要的作用。

    信安之路

扫码关注云+社区

领取腾讯云代金券