计算机组成原理 原码、补码、反码、移码
机器数通常称一个数值数据的机内编码为机器数。该机器数所代表的数值成为它的真值。原码整数:[x]的原码={0X,0≤X<2n 2n−X,−2n≤X<0 [x]的原码=\left\{\begin{aligned}0 \quad X,\quad& {0 \leq X<2^{n} }\\\2^{n}-X,& {-2^{n} ...
·
机器数
通常称一个数值数据的机内编码为机器数。该机器数所代表的数值成为它的真值。
下面所涉及到的n均为要求的字长
原码
- 整数:
[x]的原码={X,0≤X<2n 2n−1−X,−2n≤X<0 [x]的原码=\left\{ \begin{aligned} \quad X , \quad& {0 \leq X<2^{n} }\\\ 2^{n-1}-X, & {-2^{n} \leq X<0 }\\ \end{aligned} \right. [x]的原码={X, 2n−1−X,0≤X<2n−2n≤X<0 - 小数:
[x]的原码={X,0≤X<1 1−X,−1≤X<0 [x]的原码=\left\{ \begin{aligned} X , \quad& {0 \leq X<1 }\\\ 1-X, & {-1 \leq X<0 }\\ \end{aligned} \right. [x]的原码={X, 1−X,0≤X<1−1≤X<0
用原码乘除运算的规则方便,加减运算很不方便。
在原码表示中,0有两种表示形式,[+0.0]原=0 0000,[-0.0]原=1 0000
补码
- 整数:
[x]的补码={0X,0≤X<2n 2n+X,−2n≤X<0 [x]的补码=\left\{ \begin{aligned} 0 \quad X , \quad& {0 \leq X<2^{n} }\\\ 2^{n}+X, & {-2^{n} \leq X<0 }\\ \end{aligned} \right. [x]的补码={0X, 2n+X,0≤X<2n−2n≤X<0 - 小数:
[x]的补码={X,0≤X<1 2+X,−1≤X<0 [x]的补码=\left\{ \begin{aligned} X , \quad\quad \quad& {0 \leq X<1 }\\\ 2+X, \quad& {-1 \leq X<0 }\\ \end{aligned} \right. [x]的补码={X, 2+X,0≤X<1−1≤X<0
举个例子 X=-0.1011,[X]补=2+X=10.0000+(-0.1011)=1 0101 - 也可以这样:
- 若为正数,补码=0+真值,这里0表示符号为正
- 反之,补码=1+(数值位取反+1),这里第一个1表示符号为负,第二个1表示大小1
- 原码转补码:数值位取反+1.
- 补码转原码:也是数值位取反+1
- **补码转真值:**可以通过补码先转成原码,最后原码可以直接转换为真值。
- 在补码中,0有唯一的编码,即[+0.0]补=[-0.0]补=00000
- 由[Y]补求[-Y]补的方法是:连符号位在内,将[Y]补按位取反,末位加1,即得到[-Y]补。
反码
- 整数:
[x]的反码={0X,0≤X<2n 2n+1−1+X,−2n≤X<0 [x]的反码=\left\{ \begin{aligned} 0 \quad X , \quad& {0 \leq X<2^{n} }\\\ 2^{n+1}-1+X, & {-2^{n} \leq X<0 }\\ \end{aligned} \right. [x]的反码={0X, 2n+1−1+X,0≤X<2n−2n≤X<0 - 小数:
[x]的反码={X,0≤X<1 (2−2−n)+X,−1≤X<0 [x]的反码=\left\{ \begin{aligned} X , \quad \quad\quad\quad \quad& {0 \leq X<1 }\\\ (2-2^{-n})+X, \quad& {-1 \leq X<0 }\\ \end{aligned} \right. [x]的反码={X, (2−2−n)+X,0≤X<1−1≤X<0
移码
- 移码只用于整数
- 移码与补码只差一个符号位
[x]的移码=2n+X
总结:
-
对于原码、补码、反码三种机器码:
- 符号位取1表示负数,取0表示正数。
- 当真值为正数时,原码=反码=补码
- 当真值为负数时,形式为:1(符号位) 其余数值位
-
对于移码:
- 最高一位为符号位,与其他三种机器码相反,1表示正数,0表示负数(与原、补、反正好相反)
- 移码只用于表示浮点数的阶码,所以它只能用于整数。
- 补码和移码的关系:只有符号位不同
参考
- 上课老师所讲笔记
- 《计算机组成与体系结构》(清华大学出版社版本)

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐
所有评论(0)