在计算机系统中,数值,一律采用补码表示和存储。
这就是说,计算机中,并没有原码和反码。
但是,求补码,还有更正规的方法,完全可以不经过原码反码,就求出补码。
由补码,再求其代表的数值,也可以不用原码反码。
那么,就可以说,原码和反码,都没有任何用处。
-----------------------
补码,是什么呢?
其实,补码,就是一个“代替负数做运算”的正数。
使用了补码,计算机中就没有负数了,也就没有减法了。
那么,计算机只需要一个加法器,就可以走遍天下了。
补码的用处之一,就是简化计算机的硬件。
-----------------------
补码(也就是正数),怎么就能代表负数呢?
其实,道理也很简单。
你看 2 位 10 进制数吧:
25 - 1 = 24
25 + 99 = (一百) 24
进位是 10^2 = 100,这也是 2 位数的计数周期。
这个进位,显然不在 2 位数之中,那就舍弃吧。
只取 2 位数的结果,+99 和-1 的作用,就是相同的。
只要舍弃了进位,正数,就可以代替负数。
这个正数,就是“负数的补数”。
求补数的公式: 补数 = 负数 + 周期。
-----------------------
在三角函数中,大家都知道:
-π/2 和 +3π/2,这两个角度,功能也是相同的。
负角度,和正角度,要怎么变换呢?
也是用这样的公式: 正角度 = 负角度 + 周期(2π)。
-----------------------
计算机用二进制,补数,就改称为:补码。
8 位 2 进制是:0000 0000~1111 1111 (十进制 255)。
其计数周期是:2^8 = 256。
此时,-1 就可以用 255 (1111 1111) 代替。
同理,-2 的补码就是 254 (1111 1110)。
。。。
正数,本身就是正数,必须直接参加运算,不许再作任何变换。
所以,正数,根本就没有补数(补码)。
以上就是“求补码的正规做法”。
从中可以看到,并没有使用原码和反码,就把补码求出来了。
-----------------------
示例,5 - 7 = -2,用补码计算如下:
5 = 0000 0101
-7 的补码 = 1111 1001
-相加-------------
得: (1) 1111 1110 = -2 的补码
舍弃进位,只取 8 位,结果就是正确的。
借助于补码,就可以用加法,实现减法运算。
原码和反码,都没有这种功能。
所以,在计算机中,根本就不使用原码和反码。
那么,原码和反码是什么呢?
只是老师讲课的资料而已,实际上,它们什么都不是。
补码,是在计算机内部,正负数的存放格式。
在计算机内部,并没有“正码”、“反码”。
C 语言是高级语言。
用高级语言编程,是不用关心计算机内部的事的。
如果非要涉及计算机内部的细节,那就不是高级语言了。
很多教材书籍的作者,都没有弄明白:什么是高级语言。
计算机内部的码,有很多种了,要是讨论起来,C 语言就学不完了。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)