Alex_McAvoy

想要成为渔夫的猎手

原码、补码、反码与移码

【原码】

原码是一种简单、直观的机器数表示法,用机器数的最高位表示该数的符号,其余各位表示数的绝对值

纯小数

纯小数的原码定义如下:

如下 $x_1$、$x_2$ 的二进制小数:

字长为 $8$ 位,其原码表示为:

若字长为 $n+1$,则原码小数的表示范围为:

纯整数

纯整数的原码定义如下:

如下 $x_1$、$x_2$ 的二进制整数:

字长为 $8$ 位,其原码表示为:

若字长为 $n+1$,则原码整数的表示范围为:

需要注意的是,在计算机中,真值 $0$ 的原码表示有正零、负零两种形式:

【补码】

原码表示法的加减法操作比较复杂,对于两个不同符号数的加法或同符号数的减法,先要比较两个数的绝对值的大小,然后用绝对值大的数减去绝对值小的数,最后还要结合结果选择合适的符号

而在补码表示法中,加减法则统一采用加法操作即可实现

纯小数

纯小数的补码定义如下:

如下 $x_1$、$x_2$ 的二进制小数:

字长为 $8$ 位,其补码表示为:

若字长为 $n+1$,则补码小数的表示范围为:

纯整数

纯整数的补码定义如下:

如下 $x_1$、$x_2$ 的二进制整数:

字长为 $8$ 位,其补码表示为:

若字长为 $n+1$,则补码整数的表示范围为:


对于正数来说,原码与补码的表示相同,即有:

对于负数来说,原码符号位不变,数值位按位取反,末位加 $1$,即可得到对应的补码;相应的,补码符号位不变,数值位按位取反,末位加 $1$,即可得到对应的原码

【反码】

反码,常用于作为由原码求补码,或者由补码求原码的中间过渡

纯小数

纯小数的反码定义如下:

如下 $x_1$、$x_2$ 的二进制小数:

字长为 $8$ 位,其反码表示为:

若字长为 $n+1$,则反码小数的表示范围为:

纯整数

纯整数的反码定义如下:

如下 $x_1$、$x_2$ 的二进制整数:

字长为 $8$ 位,其反码表示为:

若字长为 $n+1$,则反码整数的表示范围为:

需要注意的是,在计算机中,真值 $0$ 的反码与原码一样,有正零、负零两种形式:


对于真值、原码、补码、反码的转换规律如图所示

【移码】

移码常用于表示浮点数的阶码,其只能表示整数

简单来说,移码就是在真值 $X$ 上加上一个常数作为偏置值,通常这个常数取 $2^n$,相当于 $X$ 在数轴上向正方向偏移了若干单位

移码的定义如下:

如下 $x_1$、$x_2$ 的二进制整数:

字长为 $8$ 位,其移码表示为:


同时,移码具备以下特点:

  1. 移码中真值 $0$ 的表示唯一,即:$[0]_移=100…0$
  2. 一个真值的移码与补码仅差一个符号位,即 $[x]_补$ 的符号位取反即可得 $[x]_移$
  3. 移码全 $0$ 时,对应真值的最小值 $-2^n$;移码全 $1$ 时,对应真值的最大值 $2^n-1$
  4. 移码保持了数据原有的大小顺序,移码大真值就大,移码小真值就小
感谢您对我的支持,让我继续努力分享有用的技术与知识点!