什么是原码 补码 反码
有符号数,有三种表示方法,即原码、反码和补码。
在计算机系统中,数值一律用补码来表示和存储。
在计算机系统中,原码和反码,都是不存在的。
==================
数值 0,在八位机中,就是 0000 0000。
+1,就是加上一,即为:0000 0001。
+2,就再加上一,即为:0000 0010。
其他正数,依次递增即可。。。
最后的是+127,即为:0111 1111。
以上这些,就是正数的补码。
----------
负数,就是从 0 往下减。
-1 就是 0000 0000-1,取八位的结果,
那么,-1 就是:1111 1111 = 255(十进制)。
同理,-2 就是:1111 1110 = 254。
其他负数,依次递减即可。。。
最后的是-128,即为:1000 0000 = 128。
以上,就是数值,存在计算机中的补码。
求负数的补码,计算公式是:【 256 + 这个负数 】。
如果需要二进制,就自己变换吧。
==================
十进制数的运算,有个特点,看下面的算式:
25 - 1 = 24
25 + 99 = (一百) 24
忽略进位,这两种算法,就具有相同的功能。
因此,99,就是-1 的补数。
在二进制时,255 就是-1 的补码。
==================
借助于补码,就可以把减法,转换成加法运算。
这就可以:简化计算机的硬件。
如,减法运算: 59-31 = 28。
在计算机中,用补码的加法运算如下:
59 的补码=0011 1011
-31 的补码=1110 0001
-相加-------------
得: (1) 0001 1100 = 28 的补码
忽略进位,只保留八位,结果就完全正确。
这就实现了减法运算。
原码和反码,都没有这种功能。
所以,计算机中,根本就没有原码和反码。
举个例子,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.计算的时候,符号位也参与运算.
什么是补码?
补码是一个“代表负数运算的正数”。
比如:25 - 1 = 24
25 + 99 = (一百) 24
忽略进位,+99 就能代替-1。
同理,+98 就能代替-2。
。。。
这些正数,就是“负数的补数”。
在计算机中,使用二进制,就改称为“补码”。
使用补码,可把加减法,统一为加法运算,从而就能简化硬件。
什么是原码、反码?
在计算机系统中,数值,一律采用“补码”表示和存储。
原码和反码,只能写在纸上、在嘴里说说,并没有实际意义。
没有用的东西,你说它们是什么就是什么,你就随便乱说吧。