问题1:在计算机中,正数用原码表示;负数用补码表示;而补码=反码加1。
例如:如果定义
int
i;
那么i就是一个有符号整形变量。这是,如果你给i赋值,那么计算机就会根据
i的最高位,判定其大小。
比如,i
=
-3。计算自动存储的数为(1111
1111
1111
1101
),这个就是补码。
首先:在计算机系统中,数值,一律采用补码表示和存储。
因为,使用补码,有“什么什么什么 ...”的好处。
而这些优点,原码和反码,并不具备。
所以,计算机中,并不使用原码和反码。
原码和反码,根本就不存在,所以,根本用不着区分它。
------------------------
其实,在计算机中,只有二进制数。
如:1111 1010。
它既是十进制的 250,也是-6 的补码。
它到底是什么呢?
计算机如何区分它?
其实,计算机才不管它是什么东西。
区分它们,取决于你的算法。
计算: 1111 1010 + 1111 1010 = (1) 1111 0100。
进位 1,就相当于十进制的 256。
如果你舍弃进位,这次运算就是:“补码+补码”,结果就是-12 的补码。
如果你保留进位,那就是:250 + 250 = 256 + 244 = 500。
----------------------
结论:
舍弃进位,就是【带符号数】的运算,1111 1010 就是-6 的补码。
保留进位,就是【无符号数】的运算,1111 1010 就是 250。
一个二进制数,到底是什么类型的数?
这就要看,在程序中,你对进位,如何处理了。
千万不要随便说:这个是补码、那个是无符号数。
除非你知道,算法,是怎么处理进位的。
计算机中,有原码和反码吗?
没有!
计算机中,只是使用补码,表示正负数据。
如何识别?
不用识别。