补码有什么用?
2013-12-10
2024-12-03 广告
推荐于2017-11-26
正数的补码,就是基本身
负数的补码,就是原码按位取反加1
符号位,就是最高位,最左面的第一位;其它位,就是剩下的7位
由于运算器进行加法是最快的,因此,使用补码是为了加快计算
补码、原码、反码,这些都是计算机专家创造的词汇。
事实上,它们,都不应该存在。
计算机的运算,是很简单的,和这些词汇,并没有任何关系。
--------------------------
你想象一下:
有一个小朋友,很小的,大概是三岁吧。
他只会数一百个数(0~99),会加法,还不会做减法。
那么,你可以这样教他:加 99,就是减一。
比如: 25 - 1 = 24
25 + 99 = (一百) 24
让他只取 2 位数,忽略进位,结果,就是正确的。
--------------------------
上面是一个简单的例子,却说明了一个事实:
做计算时,限定了位数,正数,就能当做负数使用。
限定了位数,有两个意义:
数值是循环的,具有周期性;
有没有进位,都不必考虑。
代替负数的正数,怎么求呢?
公式,你一定能看出来: 正数 = 负数 + 周期。
--------------------------
在计算机中,8 位 2 进制,称为一个字节。
计数值范围是:0000 0000~1111 1111。
对应的十进制:0 ~ 255。
计数周期,是:2^8 = 256。
这里,共有 256 个机器数。
较大的128 个,就可以代表负数了:
-1 补码就是:-1 + 256 = 255 = 1111 1111。
-2 的补码 = 254 = 1111 1110 (二进制)。
。。。
-128 的补码 = 128 = 1000 0000 (二进制)。
较小的 128 个,就代表自身的数值了:0 ~ 127。
--------------------------
减法算式: 5 - 7 = -2, 用 8 位补码计算如下:
5 = 0000 0101
-7 的补码 = 1111 1001
--相加---------------
得: (0) 1111 1101 = -2 的补码
在这里,用加法代替减法,略去进位,结果,就完全正确。
--------------------------
用正数(补码)代替了负数,减法运算也就没有了。
因此,计算机的硬件,就可以得到简化了。
所以,在计算机系统中,负数,一律采用补码表示和存储。
原码和反码,在计算机中,根本就不能用。
事实上,它们,根本就不存在。
--------------------------
什么是补码? 为什么要用补码?
看完上面的介绍,相信你都有了答案。
那么,原码和反码,就没有任何意义了。
这两种代码,只是用来求补码的过渡而已。
其实,原码和反码,还有“取反加一”,都是“鸡肋”。
浪费不少时间学习这些,却不能理解【补码的意义】。
况且,用“取反加一”求 0 和-128 的补码,就是难事。
-128,它没有原码和反码,拿什么取反加一?
-0 的补码,求出来是 0000 0000。
符号位,居然是 0 !
难道,负零,是正数吗?
有人说,零,不分正负,所有只有一个补码。
那么,原码反码中,为什么有两个零?
--------------------------
其实,原码反码符号位取反加一,就是一大篇自相矛盾的谬论。
正数代替负数,小学生都懂的,他们竟然弄出这许多骚操作!
老外数学不好,由此可见一斑。