一篇轻松带你Carry原码、反码、补码(建议收藏)

简介: 一篇轻松带你Carry原码、反码、补码(建议收藏)

前言

原反补是为负数而设计的,所以可以理解为正数没有反码补码,就是用原码运算。只是为了和负数保持概念一致,所以正数的原码 = 反码 = 补码。

只考虑正数和负数的情况下,加法运算有三种(正数和正数,正数和负数,负数和负数),

用原码可以正确算出正数和正数,但是算正数和负数就会出错。

用反码可以正确算出正数和正数、正数和负数,但是算负数和负数就会出错。

用补码可以正确算出加法的三种情况。

原码、反码、补码

一、一些基础概念

1.机器数
由于计算机的硬件决定,任何存储于计算机中的数据,其本质都是以二进制码存储,在计算机用一个数的最高位存放符号, 正数为0, 负数为1(肯定有朋友不理解,在计算机里1不是为真吗,在这里负数为什么为1呢?因为不考虑负数之前的时候,转换为二进制一个数的最高位就是0,1属于是后来添加的),举例:十进制中的数(5),转换为机器数就是00000101,那么它的相反数即十进制中的数(-5),转换为机器数是10000101。

2.真值
因为带有符号位,所以机器数的形式值不等于其真值,以机器数1000 0011为例,其真正表示的值为-3,而形式值为131。将带符号的机器数的真正表示的值称为机器数的真值。

3.十进制转换二进制
用2整除十进制整数,可以得到一个商和余数;再用2去除商,又会得到一个商和余数,如此进行,直到商为小于1时为止,然后把先得到的余数作为二进制数的低位有效位,后得到的余数作为二进制数的高位有效位,依次排列起来。

二、原码

原码表示法在数值前面增加了一位符号位(即最高位为符号位),原码不能直接参加运算,可能会出错,举个例子:十进制中1+(-1)=0,而在用原码运算的话0001+1001=1010,换算成十进制为-2,答案不一样这不显然错了吗。

问题就出现在了一个数加上它的相反数不等于0,那么就有了反码来解决这点。负数和正数互为相反数,所以干脆用一个正数按位取反来表示负数。

三、反码

反码就是一个数,它的原码除符号位外,按位取反。

举例-5的原码是10000101,反码是11111010,十进制中1+(-1)=0,现在用反码运算的话就是:

0001+1001->0001+1110=1111,反码1111转换为原码就是1000即0。但是当计算(-1)+(-1),又出现问题了,十进制中(-1)+(-1)=-2,用反码运算的话是:

1001+1001->1110+1110=1100,反码1100转换为原码就是1011即-3。

计算(-2)+(-3),十进制是-5,用反码运算的话是:

1010+1011->1101+1100=1001,反码1001转换为原码就是1110即-6。

经过多次运算我们可以发现了一个规律:用反码对两个负数进行运算真实值和所得值相差为1。反码并不能完全的解决问题,因此就有了补码。

四、补码

负数的补码等于反码+1

举例-5的原码是10000101,反码是11111010,补码是11111011。

现在用补码计算(-2)+(-3):

1010+1011->1101+1100->1110+1101=1011,补码1011的反码是1010,反码1010的原码是1101即-5,到此问题完美解决。

练习题

用补码运算计算9-12
注:(计算时注意正数的补码就是原码)

1.转换为加法
9+(-12)

2.转化为原码
00001001+10001100

3.转换为反码
00001001+11110011

4.转换为补码
00001001+11110100

5.计算
11111101

6.转换为反码
11111100

7.转换为原码
10000011

8.转换为十进制
-3

总结

原码、反码、补码的引入是为了解决做减法的问题。在原码、反码表示法中,我们把减法化为加法的思维是减去一个数等于加上这个数的相反数,结果发现引入符号位,却因为符号位造成了各种意想不到的问题,而补码就是来解决这个问题的。
相关文章
|
3月前
原码、反码、补码的互相转换
原码、反码、补码的互相转换
52 0
|
2月前
|
程序员
程序员必知:原码、反码、补码和移码详解
程序员必知:原码、反码、补码和移码详解
14 0
|
3月前
原码反码补码移码的介绍和计算
原码反码补码移码的介绍和计算
75 0
|
3月前
|
存储
原码,反码,补码以及计算
原码,反码,补码以及计算
34 0
原码补码反码
原码补码反码
98 0
|
存储
数制间的转换,原码、反码、补码
数制间的转换,原码、反码、补码
449 0
数制间的转换,原码、反码、补码
计算机原码反码补码
又把原码、反码、补码忘了,这里再来分析一下
计算机原码反码补码
原码、反码、补码
原码、反码、补码区别
130 0
|
Go 开发者
原码 反码 补码|学习笔记
快速学习原码 反码 补码。
79 0
|
存储 前端开发 索引