机器数

通常称一个数值数据的机内编码为机器数。该机器数所代表的数值成为它的真值。

下面所涉及到的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, 2n1X,0X<2n2nX<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, 1X,0X<11X<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,0X<2n2nX<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,0X<11X<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+11+X,0X<2n2nX<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, (22n)+X,0X<11X<0
移码
  • 移码只用于整数
  • 移码与补码只差一个符号位
    [x]的移码=2n+X
总结:
  • 对于原码、补码、反码三种机器码:

    • 符号位取1表示负数,取0表示正数
    • 当真值为正数时,原码=反码=补码
    • 当真值为负数时,形式为:1(符号位) 其余数值位
  • 对于移码:

    • 最高一位为符号位,与其他三种机器码相反,1表示正数,0表示负数(与原、补、反正好相反)
    • 移码只用于表示浮点数的阶码,所以它只能用于整数。
    • 补码和移码的关系:只有符号位不同
参考
  1. 上课老师所讲笔记
  2. 《计算机组成与体系结构》(清华大学出版社版本)
Logo

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

更多推荐