数的机器码表示——彻底弄清什么是原码、反码、补码、移码

本文详细介绍了数的机器码表示,包括原码、反码、补码和移码的概念。原码直接表示正负,但运算复杂;反码用于简化减法运算;补码解决原码计算问题,且补码是唯一表示0的方式;移码常用于浮点数阶码,以正数表示负值,简化比较。
摘要由CSDN通过智能技术生成

数的机器码表示


为了妥善的处理数据运算过程中符号位的问题,于是就产生了 把符号位和数值位一起编码起来 表示相应的数的各种表示方法。例如我们熟悉的原码、反码、补码、移码等。通常将未经 编码的数称为真值,编码后的数称为 机器数或者机器码

  • 真值的形式正、负号加某进制数绝对值的形式,即数的实际值。如+3-5

  • 机器数的形式:真值按某种编码方式进行编码后的数值,即真值在机器中的表示,称为机器数,一般可以分为 无符号数和有符号数两种如:X=01011Y=11011

原码

定点整数

若定点整数的原码形式位 x n x n − 1 ⋅ ⋅ ⋅ x 1 x 0 x_n x_{n-1}\cdot\cdot\cdot x_1x_0 xnxn1x1x0,其中 x n x_n xn为符号位,则原码表示的定义为:
x [ 原 ] = { x 0 ⩽ x < 2 n 2 n − x = 2 n + ∣ x ∣ − 2 n < x ⩽ 0 x_{[原]}=\left\{\begin{matrix} x & 0 \leqslant x<2^n \\ 2^n-x=2^n+|x| & -2^n<x\leqslant0 \end{matrix}\right. x[]={ x2nx=2n+x0x<2n2n<x0
在上式中,x代表的是真值。

例如, x = + 7 x=+7 x=+7,化为二进制表示为 x = + 0111 x=+0111 x=+0111; x [ 原 ] = 0111 x_{[原]}=0111 x[]=0111

x = − 7 x=-7 x=7,化为二进制表示为 x = − 0111 x=-0111 x=0111; x [ 原 ] = 2 3 − ( − 0111 ) = 1000 + 0111 = 1111 x_{[原]}=2^3-(-0111)=1000+0111=1111 x[]=23(0111)=1000+0111=1111

我们可以总结出来:

  • 对于正数 x = + x n − 1 . . . x 1 x 0 x=+x_{n-1}...x_1x_0 x=+xn1...x1x0,它的原码是它自己本身,常常在最高位前面补0,代表它是一个正数。

    • x [ 原 ] = 0 x n − 1 . . . x 1 x 0 x_{[原]}=0x_{n-1}...x_1x_0 x[]=0xn1...x1x0
  • 对于0,根据原码的定义则有两种表示形式:

    • + 0 = + 0 n − 1 . . . 0 1 0 0 +0=+0_{n-1}...0_10_0 +0=+0n1...0100
      • 此时正0的原码为 + 0 [ 原 ] = 0 0 n − 1 . . . 0 1 0 0 +0_{[原]}=00_{n-1}...0_10_0 +0[]=00n1...0100
    • − 0 = − 0 n − 1 . . . 0 1 0 0 -0=-0_{n-1}...0_10_0 0=0n1...0100
      • 此时负0的原码为 − 0 [ 原 ] = 1 0 n − 1 . . . 0 1 0 0 -0_{[原]}=10_{n-1}...0_10_0 0[]=10n1...0100
  • 对于负数 x = − x n − 1 . . . x 1 x 0 x=-x_{n-1}...x_1x_0 x=xn1...x1x0,它的原码是在最高位前面补1,代表它是一个负数。

    • x [ 原 ] = − x n − 1 . . . x 1 x 0 x_{[原]}=-x_{n-1}...x_1x_0 x[]=xn1...x1x0

对于一个定点整数原码 x n x n − 1 . . . x 1 x 0 x_nx_{n-1}...x_1x_0 xnxn1...x1x0,最高位 x n x_n xn代表符号位,用0来表示正数,用1来表示负数。而 x n − 1 . . . x 1 x 0 x_{n-1}...x_1x_0 xn1...x1x0则代表的是数值位。它的大小就是该原码对应真值的绝对值。

我们很容易求出它的范围 [ − ( 2 n − 1 ) , 2 n − 1 ] [-(2^n-1),2^n-1] [(2n1),2n1]

定点小数

假设定点小数的原码形式为 x s . x 1 x 2 . . . x n x_s.x_1x_2...x_n xs.x1x2...xn(实际上小数点是不存储的),其中 x s x_s xs代表符号位。则原码的定义为:
x [ 原 ] = { x 0 ⩽ x < 1 1 − x = 1 + ∣ x ∣ − 1 < x ⩽ 0 x_{[原]}=\left\{\begin{matrix}x & 0 \leqslant x<1 \\ 1-x=1+|x| & -1<x\leqslant0\end{matrix}\right. x[]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值