计算机的,反码,原码,补码!求它们的计算方法
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了计算机的,反码,原码,补码!求它们的计算方法相关的知识,希望对你有一定的参考价值。
在计算机系统中,数值,一律用补码来表示和存放。
原码和反码,在计算机中,都是不存在的。
使用补码代表正负数值,可将负数,转换成正数来计算。
这就可以节省硬件,只用加法器,便可实现加减法运算。
补码,是是什么意思? 这得从【补数】谈起。
计算机所计算的位数,是固定的,如八位机。。。
位数限定之后,其计数范围,就有了周期性。
如两位十进制 0~99,周期就是 100(一百)。
那么,减一,就可以用 +99 代替:
25 - 1 = 24
25 + 99 = (一百) 24
舍弃进位,只取两位,这两种算法,功能就是相同的。
这就用正数,代替了负数! 用加法,就实现了减法运算!
99,就是-1 的补数。 计算公式:补数 = 周期 + 负数。
学过三角函数的同学,都知道,函数周期是:2π(360°)。
那么-90°,也可以+270° 来计算。 这也是同样的道理。
一个负角度,怎么计算出“等效的正角度”,大家都会。
-------------------------
计算机用二进制,补数,就改称为:补码。
八位二进制:0000 0000 ~ 1111 1111。
对应十进制:0 ~ 255。
计数周期是:2^8 = 256。
那么,
-1 的补码是 256 + (-1) = 255 = 1111 1111(二进制)。
-2 的补码是:254 = 1111 1110。
。。。
-128 的补码是:128 = 1000 0000。
用不存在的“原码反码取反加一”来求,也是这个结果。
求负数补码的计算公式,也是: 周期 + 该负数。
正数,也可以使用这个公式。但是,计算后,这个周期的数值,
超出了计数范围,就略去了。 最后,还是这个正数。
-------------------------
例如: 7-3 = 4。
用补码的计算过程如下:
7 的补码=0000 0111
-3的补码=1111 1101
--相加-------------
得 (1) 0000 0100 = 4 的补码
舍弃进位,只保留八位作为结果,就求出了 7-3。
-------------------------
原码和反码,在计算机中,都是不存在的,无用的。
它们不过是,计算机老师捧在手中的饭碗而已。
参考技术A 换算根据他们各自的定义进行。所谓原码就是二进制定点表示法,即最高位为符号位,“0”表示正,“1”表示负,其余位表示数值的大小。
反码表示法规定:正数的反码与其原码相同;负数的反码是对其原码逐位取反,但符号位除外。
原码10010=
反码11101
(10010,1为符号码,故为负)
补码表示法规定:正数的补码与其原码相同;负数的补码是在其反码的末位加1。
例如:
(1)
原码:在数值前直接加一符号位的表示法。
例如:
符号位
数值位
[+7]原=
0
0000111
B
[-7]原=
1
0000111
B
注意:a.
数0的原码有两种形式:
定点小数表示方法
[+0]原=00000000B
[-0]原=10000000B
b.
8位二进制原码的表示范围:-127~+127
换算:
[+7]反=
0
1111000
B
[-7]反=
1
1111000
B
[+7]补=
0
0000111
B
等于
[+7]原
[-7]补=
1
1111001
B
等于
[-7]反+
1 参考技术B 引入原码
反码
和补码的目的就是为了解决减法问题,因为计算机cpu的运算器中只有加法器,要把减法转化成加法来计算。
举个例子,a表示十进制数“+16”,b表示十进制数“-19”,把这两个数的原码直接相加,得:
a=+16
(a)原=00010000
b=-19
(b)原=10010011
00010000
+
10010011
————
10100011
其结果符号位为1是负数,其数值位为100011,即等于十进制数“-35”,这显然是错的结果。
再比如,十进制数“+16”与“+19”的原码直接相减,得:
00010000
-
00010011
————
11111101
结果为“-125”,这又是错的。
但是引入补码后,加减法都可以用加法来实现,如“-16+11”的运算:
11110000
+
-16的补码
00001011
11的补码
————
11111011
-5的补码
如果是“-16-11”,那么就转化为加法运算“-16+(-11)”
11110000
+
-16的补码
11110101
-11的补码
————
111100101
-27的补码
在字长为8位的系统中,最高位所产生的进位被自然丢弃,运算结果的机器数为11100101,是-27的补码形式,结果正确。
顺便告诉你一些其它的东西:
1.二进制数中,两数的补码之和等于两数和的补码。
2.补码=反码+1
3.反码=原码除符号位外其它数值取反(即该数的绝对值取反),即“0”变“1”,“1”变“0”。
4.任何正数的原码
反码
补码的形式完全相同(即都是自身,不变)
5.在计算机中,有符号的数都是采用补码来表示的。
6.计算的时候,符号位也参与运算。
原码 反码 补码
0,计算机存储负值以补码形式存储。
1,正数的 原码,反码,补码都一样。
2,负数的反码:符号位不变,其他位按位取反; 负数的补码:此负数的反码 +1;
3, 补码的补码 是原码。由补码推导原码两种方法:1,对此补码求补码,2,此补码 -1然后按位取反(符号位除外)
4,按位非操作的本质:操作数的负值减一。自己推导如下:
正数:
2 | 00000010 | 11111101 | 10000010 | 10000011 |
A | B | D | C |
~A=B(负值的补码,也即是计算机存储负值的形式)
B按位取反(符号位不变) =D(D=-A)
D+ 1 = C(负值的原码) [实际上是D-1=C]
即C=D-1=-A-1
负数:由补码的补码=原码 => 补码取反(符号位不变为仍1) + 1 = 原码=> 补码取反 = 原码-1 =>补码取非 = -(原码 - 1).
以上是关于计算机的,反码,原码,补码!求它们的计算方法的主要内容,如果未能解决你的问题,请参考以下文章