补码的秘密之六--补码的生成

文章揭示了补码概念在早期计算机中的实际用途,指出原码、反码在现代计算机中的废弃,强调了‘取反加一’方法的局限性,并指出在高级语言中无需关注补码。作者呼吁删除教材中的过时概念,聚焦计算机底层原理的实际操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

说到补码,总会有人想到:机器数符号位原码反码取反加一真值模 ... 。

其实,这些故弄虚玄的词汇,都是毫无用处的。

你看吧,码长八位时,各码的范围如下。

原码:-127 ~ +127。
反码:-127 ~ +127。
补码:-128 ~ +127。

看到了吗? -128,只有补码,并没有原码和反码。

没有原码,拿什么取反?
没有反码,拿什么加一?

不知道计算机专家,对于这样的漏洞,作何解释。

------------------------

在计算机诞生的初期,计算机所需的指令和数据,是需要人工输入到存储器的。

正负数据、文字符号等等,都要由人,求出对应的编码,再用拨动开关输入。

补码,在此时,就是由人工算出来的。

怎么算的? 方法就很多了。

当时,也没有现代所用的显示器。

计算机运算的结果,是由一排指示灯发光不发光表示的。

指示灯显示的信息,也得由人解释,才能得到真实的数据。

在这个阶段,才需要人类掌握 “正负数据与补码” 的变换方法。

其实,这种变换,方法是很多的。

人乃万物之灵,解题思路、解决方法,当然多种多样了。

并非只有 “取反加一” 一种。

求补码的最简单方法,就是前文介绍过的:0-X。

但是,现在的计算机课程,还拿着 “取反加一” 这种有残缺的方法来教学,实乃坑人不浅。

原码反码,在计算机中,都是不使用的,当然也是不存在的。

根本就不存在的东西,还要学生背下来、考试。

有些学生为此挂科,你说冤不冤!

------------------------

现代的计算机,有了键盘和显示器,也有了操作系统。

已经不需要普通人深入到存储器去理解二进制数的特点和意义。

在各种高级软件中,只须直接输入正负阿拉伯数字即可,根本就不用关心补码。

在用高级语言编程时,也允许编程者直接使用阿拉伯数字。

------------------------

只有在用汇编语言编程时,要用到计算机底层的知识,编程者才会接触到存储器中的二进制数。

但是,汇编语言所用的计算机知识,远远不是 “取反加一” 所能描述的。

比如,需要输入数值 “-125”,就必须输入:-、1、2、5、<回车>。

在汇编语言中,收到的,是 ”五个字符的 ASCII 码“

先要把 1、2、5,这三个 ASCII 码,组成一个数字:1 * 100 + 2 * 10 + 5

运算之后,将得到 125 的二进制数:0111 1101。

再根据前面输入过负号(-),进行一次:0-X。

这就需要执行指令:NEG  AL,实现正数到负数补码的转换。

这就可以得到 “-125 的二进制数:1000 0011”。

NEG 指令的功能就是 0-X,有兴趣的朋友可去查一查 80x86 指令系统的介绍。

在整个过程中,用到 “符号位原码反码取反加一” 了吗?

没有!

------------------------

综上所述,“原码反码取反加一” 可说是一无是处。

如果把它们从计算机教材中删除掉,也不会影响到对计算机的理解。

用汇编语言编写的 “输入正负数据、排序、显示的程序”,可以在本博客中找到,此处不做赘述。

本文完

评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值