1. 首页 > 快讯

计算机基础原码、反码、补码

机器编号和真实值示例如下:

2(真值)=00000010(机器数量)- 2(真值)=10000010(机器数量)

下面用8位二进制来解释原码、反码、补码的含义和原理。

原码

真形式是计算机中数字的二进制定点表示方法。原始代码表示在值前面加了一个符号位(即最高位为符号位):该位为0表示正数,1表示负数(0有两种表示:+0和-0) ,其余位表示数值的大小。

例如:2的原码是00000010,-2的原码是10000010

反码

补码通常用于求原码的补码或从补码求原码的过渡码。补码的表达式为:

正数的反码是它本身,比如原码2的反码是00000010,负数的反码,符号位不变,其他位取反,比如2的反码-2 的补码是11111101

补码

补码表示为:

计算机基础原码、反码、补码

正数的补码是它本身

负数的补码在其原码的基础上,符号位不变,其余位取反,最后+1。 (即在补码的基础上+1)

补码的出现使得计算机可以用加法代替减法来简化算术单元的设计。它还可以解决符号表示问题。在解释什么是补码之前,我们先来看看只有原码和补码在实际计算机应用中会遇到的问题。

首先看一下原来的代码。原始代码的最高位定义符号位。因此,对于8位有符号数,计算时就会出现问题。这是因为操作符无法识别所谓的符号位,以避免过于复杂的算术设计。因此,符号位也会参与运算,运算器只加不减。举个简单的例子,1-1,结果应该是0,但运算却用的是原来的二进制码。

1 - 1=1 + (-1)=[00000001]原始+ [10000001]原始=[10000010]原始=-2

结果不为0,所以原代码不能满足需求。

我们看一下上面使用反码计算的结果:

1 - 1=1 + (-1)=[0000 0001]原始+ [1000 0001]原始=[0000 0001]反转+ [1111 1110]反转=[1111 1111]反转=[1000 0000]原始=-0

注意上面的补码运算。我们可以看到,两个相反的数相减后,结果就是8位二进制可以表示的最大值!为了便于理解,先忽略符号位。将上面的数化成十进制后就是

1+254=255

8位二进制表示的无符号数最大为255。那么8位二进制数总共可以表示2^8 256个符号。如果此时上面的结果加一,就会发生溢出,返回到位置0的现象

计算机基础原码、反码、补码

[1111 1111]逆+[0000 0001]=[0000 0000]

这就是我们想要的1-1的结果0。这也是补码等于补码加一的原理。这是模或余数的应用。在有限的计数范围内,减一个数也可以用加一个数来表示。显然,二进制表示的数值范围是[00000000, 11111111],其模为256。补码的计算结果表明,补码的模只有255。因此,需要加1,使得8位二进制刚刚溢出,一个模块被丢弃。从而回到原点,得到正确结果0。

模的概念

“模块”是指计量系统的计数范围,如过去用来计量粮食的桶、钟等。计算机也可以看作是一台测量机器,因为计算机的字长是固定的,即存储和处理的位数是有限的,所以它也有一个测量范围,即有一个“模块”。 ”。例如:时钟的测量范围为0~11,模数=12。表示n 位数字的计算机测量范围是0 到(2^n)-1,模数=2^n。 “模数”本质上是电表产生的“溢出”量,其数值无法在电表上表达。仪表只能显示模具的剩余部分。任何带有模数的仪表都可以将减法转换为加法。

假设当前时针指向8点,而准确时间是6点,那么调整时间的方法有两种:一是往回拨2小时,即8-2=6;二是调时间。另一种是向前转10小时,8+10=12+6=6,即8-2=8+10=8+12-2(mod 12)。在模12的系统中,加10和减2的效果是相同的,因此任何减2的操作都可以用加10来代替。同样,在8位二进制计算机中,它的模为2^8=256。把它想象成一个模数为256的时钟。当前时间是8点,准确时间是6点。可以通过将时钟拨回2小时(8-2),也可以依次拨254小时,8+254=256+6,然后我们可以看到8+254的二进制表示为

8-2=8+254=[0000 1000]+[1111 1110]=[0000 0110]=6

可见上面的[1111 1110]正好是-2的补码。我们还可以从原始代码中推导出这个补集:

-2=[1000 0010]原=[1111 1101]逆=[1111 1110]补

看到这里,你大概明白了,所谓补码,其实就是对256取模的补数,通过取模,利用测量范围的溢出来实现减法和加法。补数的特点是它们的加法恰好等于模数。例如,2和254是互补数,它们的加法正好是模256。计算减法时,两个互补数相加正好是相同的模数,溢出回原点0,剩下的数自然就是该值减法后。我想这就是它被称为补码的原因。如果不明白,可以把它想象成一个有256个时刻的时钟,通过向前拨(加)和向后拨(减)来理解。

2+254=[0000 0010]+[1111 1110]=[0000 0000]

用户评论

晨与橙与城

计算机基础中的原码、反码、补码,一直是我学习的难点,希望能通过这篇文章彻底弄懂!

    有16位网友表示赞同!

半梦半醒半疯癫

终于找到一篇解释原码、反码、补码的文章了,感觉比以前学过的更清晰易懂!

    有17位网友表示赞同!

滴在键盘上的泪

原来原码、反码、补码是这么回事啊,以前一直没搞懂,看了这篇文章豁然开朗!

    有6位网友表示赞同!

闲肆

感觉原码、反码、补码这三个概念很难,不知道这篇文章能不能帮我理解?

    有8位网友表示赞同!

病态的妖孽

这篇文章讲的太好了,把原码、反码、补码的关系讲得很清楚!

    有13位网友表示赞同!

浮光浅夏ζ

终于明白计算机为什么要用补码来表示负数了!

    有13位网友表示赞同!

岁岁年年

原来补码是为了方便计算机进行加减运算!

    有5位网友表示赞同!

满心狼藉

计算机基础中的原码、反码、补码,终于弄懂了!

    有14位网友表示赞同!

水波映月

感觉这篇文章写的很详细,关于原码、反码、补码的解释很到位!

    有15位网友表示赞同!

来自火星球的我

原码、反码、补码,这些概念在计算机中很重要!

    有13位网友表示赞同!

醉枫染墨

这篇文章讲的很有道理,让我对原码、反码、补码有了更深的理解!

    有6位网友表示赞同!

無極卍盜

之前一直搞不懂原码、反码、补码,看完这篇文章终于明白了!

    有10位网友表示赞同!

灬一抹丶苍白

感谢这篇文章,让我对原码、反码、补码有了更清晰的认识!

    有5位网友表示赞同!

百合的盛世恋

原码、反码、补码,这三个概念真的很重要!

    有5位网友表示赞同!

|赤;焰﹏゛

计算机基础中的原码、反码、补码,是理解计算机运算的基础!

    有10位网友表示赞同!

日久见人心

这篇文章解释得很好,终于明白原码、反码、补码是如何工作的!

    有12位网友表示赞同!

淡抹丶悲伤

看了这篇文章,感觉对原码、反码、补码有了更深入的理解!

    有8位网友表示赞同!

歆久

原码、反码、补码,这些概念看起来很简单,但理解起来并不容易!

    有14位网友表示赞同!

莫失莫忘

感谢这篇文章,让我对计算机基础中的原码、反码、补码有了更全面的认识!

    有8位网友表示赞同!

逃避

这篇文章讲解的清晰易懂,对理解原码、反码、补码很有帮助!

    有14位网友表示赞同!

本文采摘于网络,不代表本站立场,转载联系作者并注明出处:https://www.iotsj.com//kuaixun/4119.html

联系我们

在线咨询:点击这里给我发消息

微信号:666666