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

计算机世界里只有0和1,进位时逢二进一,借位时借一当二,称之为二进制。其物理表现形式可能是三极管的通电与断电、也可能是CPU的低电平与高电平。一个数在计算机中的

大家好,今天给各位分享计算机基础原码、反码、补码的一些知识,其中也会对进行解释,文章篇幅可能偏长,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在就马上开始吧!

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

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]

用户评论

计算机基础原码、反码、补码
蝶恋花╮

刚开始学习计算机技术,这篇文章讲解得很透彻!原码、反码、补码都清晰明白了,以前感觉这些概念很复杂很难记,现在感觉一下子就简单多了.

    有6位网友表示赞同!

计算机基础原码、反码、补码
你瞒我瞒

终于搞明白了コンピュータの原码、反码、补码的区别了! 真的很感谢作者的耐心解释,之前一直一头雾水呢!

    有18位网友表示赞同!

计算机基础原码、反码、补码
爱到伤肺i

补码还是有点绕脑的,这个转换的过程对我来说比较难理解。 希望未来可以添加一些更具体的例子来进行说明,这样会更好理解。

    有12位网友表示赞同!

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

计算机基础知识确实很重要,这篇文章很有帮助!特别是对これから学习编程的人来说,掌握这些概念非常重要

    有9位网友表示赞同!

计算机基础原码、反码、补码
像从了良

感觉这篇博客写的有点太浅薄了,原码、反码、补码这三个概念其实还有很多细节和应用场景, 希望能更深入地讲解一下!

    有18位网友表示赞同!

计算机基础原码、反码、补码
清羽墨安

这个标题是不是太笼统了?写成 “计算机二进制数的表示方法:原码、反码、补码” 会更好一些吧。

    有10位网友表示赞同!

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

个人觉得文章应该加一些实践练习,这样更容易理解和记忆 原码、反码、补码。

    有8位网友表示赞同!

计算机基础原码、反码、补码
一样剩余

我对学习编程很感兴趣,但这些计算机基础知识总是让我头晕脑胀,幸好发现了你的文章!终于明白了一些!

    有16位网友表示赞同!

计算机基础原码、反码、补码
封心锁爱

计算机基础真的太难了,原码、反码、补码都让人觉得难以入门…

    有18位网友表示赞同!

计算机基础原码、反码、补码
反正是我

这个算法的原理的确很有意思,让我对计算机内部的工作机制有了更深的认识。感谢作者的分享!

    有5位网友表示赞同!

计算机基础原码、反码、补码
坠入深海i

原来这三个概念是这样互相转换的啊,以前一直搞不明白! 现在终于豁然开朗了!

    有12位网友表示赞同!

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

学习计算机真是太烧脑了, 原码、反码、补码这些东西看了一圈,头还是晕…

    有11位网友表示赞同!

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

文章讲解很透彻,特别喜欢例子中的解释,让抽象的概念变得更加生动形象! 👍

    有19位网友表示赞同!

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

我觉得可以加入一些动画或视频来演示原码、反码、补码的转换过程,这样更直观易懂!

    有14位网友表示赞同!

计算机基础原码、反码、补码
淡抹丶悲伤

以前学过原码和反码,补码我是没怎么接触过。文章解释的很清晰,补码的运用场景也让我收获很大!

    有11位网友表示赞同!

计算机基础原码、反码、补码
墨染天下

对于编程新手来说,这篇关于原码、反码、补码的文章非常有用!它帮助我更好地理解了二进制数在计算机中的表示方法。

    有12位网友表示赞同!

计算机基础原码、反码、补码
予之欢颜

这篇博文受益匪浅! 原码、反码、补码的讲解非常详细,对我的学习很有帮助。希望作者能继续分享更多计算机基础知识!

    有8位网友表示赞同!

计算机基础原码、反码、补码
金橙橙。-

看完这篇文章,我对原码、反码、补码这个概念有了更清晰的认识!之前总是觉得很难理解,现在感觉变得更容易掌握了!

    有7位网友表示赞同!

原创文章,作者:小su,如若转载,请注明出处:https://www.sudun.com/ask/99522.html

(0)
小su's avatar小su
上一篇 2024年8月29日 下午10:56
下一篇 2024年8月29日 下午10:57

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注