有符号位的二进制数,在计算原码和补码时那个符号位是始终不变的吗?
在计算机系统中,数值,一律采用补码表示和存储。
在计算机中,原码和反码,都是不存在的。
求补码,也用不着它们。
所以,原码和反码,根本就没有用!
------------------------
补码,其实,就是一个“代替负数做运算”的正数。
且看 2 位 10 进制数的运算:
25 - 1 = 24
25 + 99 = (一百) 24
你舍弃进位,只取两位,这两种算法,功能就完全相同。
那么,+99,就代替了-1。加法,也就代替了减法。
这不就用正数(补数)代替了负数吗?
由负数求对应的补数,计算公式: 补数 = 负数 + 10^n。
式中: n 是补数的位数。
10^n 是 n 位 10 进制数的计数周期。
-------------------------
计算机用二进制,补数,就改称为:补码。
计算机所能计算的位数,是固定的,如八位机、16 位。。。
八位二进制:0000 0000~1111 1111 (十进制 255)。
八位二进制的循环计数周期,是:2^8 = 256。
求负数补码的计算公式,也是: 负数 + 周期。
-1 补码就是:256 + (-1) = 255 = 1111 1111(二进制)。
-2 补码就是:256 + (-2) = 254 = 1111 1110(二进制)。
。。。
-128 补码就是:128 = 1000 0000(二进制)。
正数,必须直接参加运算,不许转换。
所以,正数不存在补码。
求补码,根本就不用“原码反码符号位取反加一”。
-------------------------
举例说明,用八位补码计算: 5 - 7 = -2。
5 = 0000 0101
-7 的补码= 1111 1001
--相加-------------
得 (1) 1111 1110 = -2 的补码
舍弃进位,只保留八位,这就用加法,实现了 5-7。
于带符号数才采用码型表示问题10000000确实-128补码于带符号数高位符号位0表示数、1表示负数始终变所码型换算都针低位绝值部进行
例12原码00001100-12原码10001100其绝值部0001100求反加11110100高位添符号位1补码11110100
所码型转换运算针绝值部针符号位符号位始终变
不用扯那些没有用的。
正数的补码,就是该数本身。
负数的补码,就用其正数,减一取反,就成可了。
例如,已知:+9 的补码是:0000 1001。
求-9 补码步骤如下:
先减一:0000 1001-1 = 0000 1000。
再取反,即得:-9 补码 = 1111 0111。
这不就完了吗?
原码反码符号位,这些,都是垃圾。