【中级软件设计师】原码、反码、补码、移码 (附软考真题)
【中级软件设计师】原码、反码、补码、移码 (附软考真题)
本文主要讲解计算机中的原码、反码、补码和移码的概念,并通过软考真题进行实例解析。文章适合备考软考的考生阅读,帮助理解这些基本概念并掌握相关计算方法。
一、历年真题
- 计算机中常采用原码、反码、补码和移码表示数据,其中,±0编码相同的是()。(2009年上半年)
- A. 原码和补码
- B. 反码和补码
- C. 补码和移码
- D. 原码和移码
- 若某整数的16位补码为FFFFh (H表示十六进制),则该数的十进制值为()。(2010年上半年)
- A. 0
- B. -1
- C. 2^16- 1
- D. -2^16+ 1
- 若某计算机采用8位整数补码表示数据,则运算()将产生溢出。(2010年下半年)
- A. -127+1
- B. -127-1
- C. 127+1
- D. 127-1
- 原码表示法和补码表示法是计算机中用于表示数据的两种编码方法,在计算机系统中常采用补码来表示和运算数据,原因是采用补码可以()。(2011年上半年)
- A. 保证运算过程与手工运算方法保持一致
- B. 简化计算机运算部件的设计
- C. 提高数据的运算速度
- D. 提高数据的运算精度
- 某机器字长为n,最高位是符号位,其定点整数的最大值为()。(2014年上半年)
- A. 2^n-1
- B. 2^(n-1)- 1
- C. 2^n
- D. 2^(n-1)
- 如果“2X”的补码是“90H”,那么X的真值是()。(2016年上半年)
- A. 72
- B. -56
- C. 56
- D. 111
- 采用n位补码(包含一个符号位)表示数据,可以直接表示数值()。(2018年下半年)
- A. 2^n
- B. -2^n
- C. 2^(n-1)
- D. -2^(n-1)
二、考点:原码、反码、补码、移码
1. 原码、反码、补码、移码
在原码表示法中,最高位是符号位,0表示正数,1表示负号,其余的 n - 1 位表示数值的绝对值。
在反码表示法中,最高位是符号位,0表示正数,1表示负号,正数的反码与原码相同,负数的反码则是其绝对值按位取反。
在补码表示法中,最高位是符号位,0表示正数,1表示负号,正数的补码与其原码和反码相同,负数的补码则等于其反码的末位加1。
编码 +0 -0 规则
原码 0000 0000 1000 0000
反码 0000 0000 1111 1111 负数的反码是在其原码基础上,符号位不变,其余各位取反。
补码 0000 0000 0000 0000 负数的补码是在其原码基础上,符号位不变,其余各位取反,最后+1。(即在反码的基础上+1)。
移码 1000 0000 1000 0000 补码的基础上将符号位取反
编码 +1 -1 规则
原码 0000 0001 1000 0001
反码 0000 0001 1111 1110 负数的反码是在其原码基础上,符号位不变,其余各个位取反。
补码 0000 0001 1111 1111 负数的补码是在其原码基础上,符号位不变,其余各位取反,最后+1。(即在反码的基础上+1)。
移码 1000 0001 0111 1111 补码的基础上将符号位取反
注意:
①**±0编码相同(唯一)的是补码和移码。补码没有±0之分。
②[[X]补]补 =[X]原**(常用于题目计算)
2. 数值范围
编码 定点整数 定点小数
原码 - (2^(n-1)- 1) ~ + (2^(n-1)-1) -127 ~ +127 - (1 - 2^(n-1)) ~ + (1 - 2^(n-1))
反码 - (2^(n-1)- 1) ~ + (2^(n-1)-1) -127 ~ +127 - (1 - 2^(n-1)) ~ + (1 - 2^(n-1))
补码 - 2^(n-1)~ + (2^(n-1)-1) -128 ~ +127 -1 ~ + (1 - 2^(n-1)) 常用于加减运算,补码可以简化计算机部件的设计
移码 - 2^(n-1)~ + (2^(n-1)-1) -128 ~ +127 -1 ~ + (1 - 2^(n-1)) 常用于浮点数的阶码
三、真题的答案与解析
答案
- C
- B
- C
- B
- B
- B
- D
解析
第1题:在补码中0具有唯一编码。将补码符号位取反可以得到移码,因此对于0来说,移码和补码是唯一的,±0编码相同。
假设字长为8位 +0 -0
原码 0000 0000 1000 000
反码 0000 0000 1111 1111
补码 0000 0000 0000 000
移码 1000 0000 1000 000
第3题:考查【补码的数据范围】
釆用8位补码表示整型数据时,可表示的数据范围为:-2^(n-1)~ + (2^(n-1)-1),即**-128 ~ +127**,那么运算127+1=128将产生溢出,答案选C。
第2、6题:均考查 [[X]补]补 = [X]原
第2题:
① 先将十六进制FFFFh转化成二进制1111 1111 1111 1111,根据最高位是符号位,1表示负数,0表示正数,即该数为负数;
② 根据[[X]补]补 = [X]原,即补码1111 1111 1111 1111,先转化为反码:1000 0000 0000 0000,再转化为补码:1000 0000 0000 0001,即整数的16位补码为FFFFh的二进制原码表示为1000 0000 0000 0001,最高位为符号位,1表示负数,结果为-1,答案选B。
第6题:
① 先将十六进制90H转化成二进制1001 0000,根据最高位是符号位,1表示负数,0表示正数,即该数为负数;
② 根据[[X]补]补 = [X]原,即补码1001 0000,先转化为反码:1110 1111,再转化为补码:1111 0000,即2X的二进制原码表示为1111 0000,最高位为符号位,1表示负数,转化为十进制为-112,即2X = -112,X = -56,答案选B。