原码,反码,补码的编码规则?
计算机中,并没有原码和反码。
正负数据,在计算机中,只是以补码存放的。
==============
下面以八位二进制来说明补码的编码规则。
八位二进制,共有 256 个补码。
数字 0,就是以 0000 0000 存放。
数字 1,就是加上 1,得 0000 0001。
其它,继续加,就行了。
数字 127,就是 0111 1111。
以上就是 0~127 的补码。
==============
负数,递减就行了。
数字-1,就从 0,减去一,即:
0000 0000-1 = (借位 1) 1111 1111。
只保留八位,就是 1111 1111 (十进制 255)。
数字-2,就再减一,得:1111 1110 (= 254)。
数字-3,就再减一,得:1111 1101 (= 253)。
其它,继续减,即可... ...
数字-128,最后就得到:1000 0000 (= 128)。
以上这些,就是-1~-128 的补码。
==============
计算公式:
负数的补码=【256+该负数】
正数的补码,就是正数本身
(如果需要二进制,你自己再变换。)
八位补码可以表示:-128~+127。
==============
用补码代替负数,就可以把减法,转换为加法运算。
因此,计算机只要有一个加法器,就够用了。
例如: 7-3 = 4。
用补码的计算过程如下:
7 的补码=0000 0111
-3的补码=1111 1101
--相加-------------
得: (1) 0000 0100 = 4 的补码
舍弃进位,只保留八位作为结果,就是 4。
这就用加法,解决了负数以及减法的问题。
------
原码和反码,并没有这些功能。
所以,在计算机中,根本就没有原码和反码。
所谓的“取反加一”,由谁算呢?
计算机,可不做这些事。
《计算机组成原理》看看计算机中数据的表示形式。
首先更正下楼上的说法,正数的原码反码补码都相同,即0011的反码也为0011
!!切记
举例来说:对于正数3,其二进制形式为
0011,我们把
0011成为成为真值,在计算机中用0或1表示正负号,那么
0011在计算机中原码可以表示为00011(第一位为符号位)。反码补码不变。
对于负数,反码即按位取反,比如10011可表示-3,10011为原码,那么符号位不变,其余位按位取反即反码11100.
补码的存在是为了简化计算的,其符号位一起参加运算,从而对于减法可转化为加法。补码的实质就是mod2。比如我们的钟表是mod12的,那么14点钟我们也可以说是下午2点。获得补码的方法是“按位取反,末位加1”那么10011的补码便是11101.。。。。。。。。。。
机器数即数值在计算机中的表示形式。
不知您明白了吗?
在计算机中表示整型数据有以下几种方法:
1.二进制补码
2.二进制反码
3.偏移表示法
4.带符号的数表示法
带符号的数表示法最高有效位是符号位,1为负,0为正。比如:00000001为1,10000001为-1
二进制反码是简单地把正数取反就是对应的负数了,比如00000001为1,11111110为-1
二进制补码在计算机中比较常用,当表示负数的时候,在原来原码的基础上再加1
偏移表示法用一个数与它相减就得到所需的数
Top
负数:原码:-(绝对值原码)
反码:原码除符号位外取反
补码:反码+1