找回密码
 立即注册
查看: 4510|回复: 0

什么是原码,反码以及补码

[复制链接]

10

主题

19

回帖

234

积分

中级会员

积分
234
发表于 2023-8-2 22:26:37 | 显示全部楼层 |阅读模式
1、概念

计算机底层存储数据时,存储的是数据对应的二进制数字。对于整型数据,其二进制表示形式有三种,分别是:原码反码补码,而实际存储的是整型数据的补码
原码、反码以及补码都是有符号的,其中最高位存放符号位,0 表示正数,1 则表示负数。
1. 原码:最高位表示正负,其余位表示数值。例如十进制的正负 1,用 8 位二进制的原码表示:

+1=[00000001]原,-1=[10000001]原
2. 反码:正数的反码和原码相同;负数的反码是在原码的基础上,符号位不变,其余位按位取反。

+1=[00000001]反,-1=[111111110]反
3. 补码:正数的补码和原码也相同;负数的补码是在反码的基础上加 1。

+1=【00000001】补,-1=【111111111】补


正数的原码,反码和补码都相同,就不举例说明
比如:一个负数的补码是10001101,那它的反码为10001100,原码为11110011。
符号公式:(n-1)

二、补码的意义
我们人脑可以知道最高位是符号位,在计算的时候就会根据符号位进行加减,但是对于计算机,加减乘除已经是最基础的运算,因此要设计得尽量简单,而让计算机辨别符号位会让计算机的基础电路设计变得复杂。于是人们开始探索将符号位参与运算,并只保留加法的方法,根据运算法则,减去一个数等于加上这个数的负数,即 1 - 1 = 1 + (-1)。
1. 使用原码运算

1-1=1+(-1)=[00000001]原+[10000001]原=[10000010]原=-2
所以让符号位也参与运算时,使用原码,对于减法运算来说,结果是不正确的。这也是计算机内存在存储数据时不使用原码的原因。为了解决这一问题,就出现了反码。

2. 使用反码运算

1-1=1+(-1)=[00000001]反+[11111110]反=[11111111]反=[10000000]原=-0
使用反码的问题在于 0 的符号是负号,而且 [0000 0000]原 和 [1000 0000]原 都表示 0。为了解决这一问题,就出现了补码

2. 使用补码运算

1-1=1+(-1)=[00000001]补+[11111111]补=[00000000]反=[00000000]原=0
这样就不存在 -0 的问题了。



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|CrazyFPGA ( 粤ICP备2023025753号 )

GMT+8, 2024-5-18 23:15 , Processed in 0.047445 second(s), 20 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表