补码.原码.反码怎么运算的啊.详细一点
计算机中,并没有原码反码,只有补码。
补码,是在计算机中,自然形成的,跟原码反码毫无关系。
对于补码,应该直接用二进制来讨论,不要绕道并不存在的原码反码上去。
以八位机来说明如下。
数字 0,就是用八个位:0000 0000 来存放的。
数字-1,就是用零的二进制,减去一,即:
0000 0000-1 = (1) 1111 1111,
仍存放八个位,就是 1111 1111 (十进制255)。
数字-2,你就再减去一,就是 1111 1110 (=254)。
数字-3,你就再减去一,就是 1111 1101 (=253)。
。。。
-128,就是减 128 次一,最后得 1000 0000 (=128)。
这些就是负数的补码。
计算公式: 256+该负数
=256-对应的正数
-18 的补码就是:256-18 = 238 = 1110 1110(二进制)。
你用“原码反码符号位取反加一”来计算,也一样是这个结果。
无聊的时候,再探讨原码反码吧,反正也没有任何用处。
对正数而言,原码、反码、补码都是相同的。
十进制数7,
都是:
00000111
对于-7
原码,只是最高位用1表示负数,就是:
10000111
反码,就是在原码的上,除最高位(符号位)外,按位取反就行:
11111000
补码,就是在反码的基础上,最低位加1:
11111001
在计算机中,使用的是二进制。
八个二进制位,称为一个字节。
计数范围是:0000 0000~1111 1111。
对应十进制:0 ~ 255,共有 256 个数字。
计数周期是:2^8 = 256。
在计算机中,并没有负数。
计算机中这些数字,都属于自然数,即“零和正数”。
但是,实际上,正数,也能当负数用的。
你看 2 位 10 进制数的计算:
25 - 1 = 24
25 + 99 = (一百) 24
如果你不舍弃进位,结果就 124,+99 还是 99。
如果,舍弃超出 2 位数的进位,+99 就相当于-1 。
这时的正数,就称为“负数的补数”。
算法是:补数=负数+周期 (10^n),n 是补数的位数。
-------------------------
在计算机中,255 = 1111 1111,就相当于-1。
示例: 0000 0001 = 1
+ 1111 1111 = 255
--------------
(1) 0000 0000 = 0
舍弃了进位 1,这算式,就是:+1 -1 = 0。
如果保留进位,这就是: 1 + 255 = 256。
-------------------------
同理,254 = 1111 1110,就相当于-2。
。。。
只要你舍弃进位,这些正数,就可以代表负数,参加运算。
这些正数,就称为:负数的补码。
补码 = 负数 + 周期(2^n),n 是补码的位数。
-------------------------
利用补码,可以把减法,转换成加法。
从而就能简化计算机的硬件。
原码和反码,都没有这种功能。
所以,在计算机中,并没有原码和反码。
符号位原码反码取反加一,这些,都是“鸡肋”。
学习这个,花费不少时间,还是弄不懂“补码的意义”。
老外数学不好,也就只能整这些骚操作了。