二进制数反码和补码的算法
在计算机系统中,数值,一律采用补码表示和存储。
在计算机中,原码反码,都是不存在的。
因此,原码反码,根本就没有任何用处,不必讨论。
-----------------------
补码,实际上,它就是一个“代替负数”的正数。
使用了补码(正数)之后,在计算机中,就没有负数了。
同时,也就没有了减法运算。
因此,不但能简化算法,而且顺便就能简化计算机的硬件。
-----------------------
正数,怎么能代替负数呢?
你看看两位十进制数(0~99)吧:
25 - 1 = 24
25 + 99 = (一百) 24
只要你舍弃进位,只保留两位,+99 就能代替-1。
+99,这就是-1 的补数。
对应关系:补数=负数+计数周期(10^2 = 100)。
-----------------------
计算机中,使用二进制,补数,也就改称为:补码。
8 位 2 进制数,其计数周期,就是:2^8 = 256。
-1 的补码,就是:-1 + 256 = 255 = 1111 1111 (二进制)。
对吗? 分别用十进制、二进制,计算一下试试:
3 = 0000 0011
-1 = + 1111 1111
---------------
2 = (1) 0000 0010
只要舍弃进位,这两种算法,结果,就是相同的。
同理,-2 补码就是:254 = 1111 1110。
。。。
-128 的补码是:128 = 1000 0000。
零和正数,必须直接参加运算,不可变换。
零和正数,不需要变换,也就不存在“正数的补码。
-----------------------
补码的来源和意义,就是这些。
你如果从“原码反码符号位”开始学补码,肯定是“学不懂”的。
老外脑子不好用,周期、等效什么的,当然也是搞不懂的。
因此,才编造了“原码反码。。。”一大滩垃圾!
其实,那些都是无稽之谈,随口乱讲的,并无任何理论依据。
而且,在八位的原码反码中,都没有-128。
那么,-128 的补码,你们怎么求呢?
19的二进制数为:0001
0011
那么+19
原码为
0001
0011
反码为
0001
0011
补码为
0001
0011
那么-19
原码为
1001
0011
(左边第一位表示正负数,正数为0,负数为1)
反码为
1110
1100
补码为
1110
1101
1
100011
//
符号位:正数用0表示;负数用1表示
反码:
1
011100
//
除符号位外,其它位按位取反,即0变1,1变0
补码:
1
011101
//
反码的基本上加1