首页 > 编程知识 正文

计算机如何表示负数(补码求负数)

时间:2023-05-05 06:54:17 阅读:95203 作者:4772

上述:从计算机的原码、反码、补码可以看出,计算机有3种编码方式,表示相同的个数。

原符号:符号位加上真值的绝对值,第一位表示符号,剩下的位表示值。 反符号:正的反符号是其本身; 负数的反码基于其原始码,编码比特不变化,剩余比特取反。 补数)是正补数还是其本身; 负数的补数基于其原始代码,符号位保持不变,其余的位相反,成为最后一个。 也就是说,反转加1。 关于1和-1,

原=0001反=0001补

-1=1001原=[1110]反=[1111]补

为什么计算机要用补数的形式表示负数呢?

首先,我们知道,某个数在计算机中有正负之分,该数的最高位比特(符号比特)用来表示其正负。 其中,0表示正,1表示负。

对计算机来说,加法是最基础的运算,需要尽量简单地设计。

根据加法的算法,a-b等于a(-b )。

如果符号位也能参与运算,而不是单个“符号位的识别”,则可以大大简化计算机的基础电路。

因此,开始探索只保留加法,使编码比特参加运算的方法。

1、原码:1 - 1 = 0

我们先来看看源代码。 1 - 1=0

1-1=1(-1 ) )。

=原[ 0001 ]原

=原

=-2

这显然是错误的。

2、反码:1 - 1 = 0

解码时:

1-1=1(-1 ) )。

反[1110]反

=[1111]相反

=[1000]原

=-0

用反码计算后,发现结果是正确的。 但是,一个问题是“0”的表示有两个:

-0(1000 ) )0) (0000 ) )中给0加符号是没有意义的。

另外,采用补数形式,对于4位的二进制,其表现范围为[1000]逆~[0111]逆,即[1111]原~[0111]原,即[-7,7 ]。

“0”有两种编码格式,这意味着浪费了一种编码。

3、补码:1 - 1 = 0

添加代码可以解决反码问题。

1-1=1(-1 )。

=[0001]补[1111]补

=[0000]候补

=元

=0

补数不仅可以解决0的代码和2个编码的问题,还可以用[1000]表示-8,即最少数多一个。

也就是说,对于4位的二进制,由原码或反码表示的范围为[-7,7 ],由补数表示的范围为[-8,7 ]。

由于计算机用补数表示负数,所以关于编程中常用的32位int型,可以用[-2 ^ 31,2 ^ 31-1 ]的范围表示。

相关阅读

C语言的数据类型介绍

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。