原码、反码、补码和移码,是软件评测师考试的高频考点,经常出现在上午场的客观选择题当中。各种数据在计算机中表示的形式称为机器数,其特点是采用二进制计数制,数的符号用0、1表示,小数点隐含表示而不占位置。机器数对应的实际数值称为数的真值。对于带符号数,机器数的最高位是表示正、负的符号位,其余位则表示数值。若约定小数点的位置在机器数的最低数值位之后,则是纯整数;若约定小数点的位置在机器数的最高数值位之前(符号位之后),则是纯小数。为了便于运算,带符号的机器数可采用原码、反码和补码等不同的编码方法,机器数的这些编码方法称为码制。
下面就各种码制的基础知识进行总结学习。
一、原码
数值X的原码记为[X]原,如果机器字长为n(即采用n个二进制位表示数据),则最高位是符号位,0表示正号,1表示负号,其余的n-1位表示数值。
数值零的原码表示有两种形式:
[+0]原=00000000,[-0]原=10000000。
二、反码
数值X的反码记为[X]反,如果机器字长为n(即采用n个二进制位表示数据),则最高位是符号位,0表示正号,1表示负号,其余的n-1位表示数值。
正数的反码与原码相同,负数的反码则是其绝对值按位求反。
数值零的反码表示有两种形式:
[+0]反=00000000,[-0]反=11111111。
三、补码(常考)
数值X的补码记为[X]补,如果机器字长为n(即采用n个二进制位表示数据),则最高位是符号位,0表示正号,1表示负号,其余的n-1位表示数值。
正数的补码与原码和反码相同,负数的补码则是其反码的末尾加1。
在补码表示中,数值零有唯一的编码:
[+0]补=00000000,[-0]补=00000000。
特殊规定,用补码表示时,当符号位为1,而其他数值位都为0时,符号位的1即表示负数又表示数值。采用补码表示带符号数据时,算术运算过程中符号位与数值位采用同样的运算规则进行处理。因此用补码进行加减运算要简便的多,这也是大多数计算机采用的方式。
四、移码(一般不考)
移码表示法是在数X上增加一个偏移量来定义的,常用于表示浮点数中的阶码。如果机器字长为n,在偏移量为2^(n-1)时,只要将补码的符号位取反便可获得相应的移码表示。
在移码表示中,数值零有唯一的编码:
[+0]移=10000000,[-0]移=10000000。
五、各种码制的取值范围表
设机器字长为n,各种码制下带符号数的范围如下表所示:

下面是近几年对码制考察过的真题,以后仍是考试出题的重点,大家要重视起来。
【2018年10题】采用( )表示带符号数据时,算术运算过程中符号位与数值位采用同样的运算规则进行处理。
A、补码
B、原码
C、反码
D、海明码
解析:本题考查码制的基础知识。
补码在进行算数运算时,符号位与数值位一起参加运算,采用一样的规则不需要特殊处理。因此用补码进行加减运算要简便的多,这也是大多数计算机采用的方式。
故正确答案为A
【2019年2题】若计算机字长为32,则采用补码表示的整数范围为( )。
A、[-2^31,2^31)
B、(-2^31,2^31)
C、[―2^32,2^31)
D、[―2^31,2^32)
解析:本题考查码制表示的基础知识。
各种码制表示的范围如下图所示:

故正确答案为:A
作者唯一官方个人微信公众号(昊洋与你一起成长):HYJY20180101
写于2021年9月2日
作者:昊洋讲师
版权所有,侵权必究




