计算机原理与基础 —— 原码、反码、补码之间的快速转换和简单运算
做而论道_CS:
八位二进制数,总共有 256 个数值。
较大的一半 (128 个) 可代表负数,即:-1 ~ -128;
其余的一半 (128 个) 还保持原值,即: 0 ~ +127。
如此划分的二进制数,“计算机专家” 就称之为 “补码”。
其实,它们仍然是正常的数字,根本就不是什么 “码”!
可想而知,这些 “计算机专家”,也并不是什么 “专家”!
那么,这八位二进制的表示范围,就是:-128 ~ +127。
128 个负数,与其八位的补码,对应如下:
====================
负数 补码
-1 1111 1111 = 255 (十进制)
-2 1111 1110 = 254 (十进制)
-3 1111 1101 = 253 (十进制)
。。。。 。。。。
-128 1000 0000 = 128 (十进制)
====================
你如果有小学毕业的水平,你就能看出它们的关系:
[负数]补码 = 256 + 负数。
通用公式:
[任意数]补码 = 2^n + 该数。
n 是二进制数的位数。
求补码,就是这么简单!
正负数值,与其补码,可以直接转换!
根本就用不着什么:符号位原码反码取反加一。
例如,-27 的八位补码是什么?
解:
[-27 ]补 = 256 - 27 = 229,
229 = 1110 0101 (二进制)。
又例,+27 的八位补码是什么?
解:
[+27 ]补 = 256 + 27 = (进1) 27,
(大于 255,就超过了八位数,就会进位。)
27 = 0001 1011 (二进制)。
补码,这不就求出来了吗!
符号位原码反码取反加一,有用吗?
都是用不着的!
由此可知:
补码,与原码反码,并无任何关系。
|