数据表示和检验 原码、反码、补码、移码表示法

本文深入探讨了计算机中数值的表示方法,包括无符号数和带符号数,以及原码、反码、补码和移码的不同编码方式。详细解释了每种编码下数值的范围和特点,特别关注于补码表示法及其在现代计算机系统中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

各种数值在计算机中表示的形式称为机器数,其特点是采用二进制计数制,数的符号用0、1表示,小数点则隐含表示不占位置。机器数对应的实际数值称为数的真值。
机器数有无符号数和带符号数之分。无符号数表示正数,在机器数中没有符号位。对于无符号位数,若约定小数点的位置在机器数的最低位之后,则是纯整数;若约定小数点的位置在机器数的最高位之前,则是纯小数。对于带符号数,机器数的最高位是表示正、负的符号位,其余位则表示数值。若约定小数点的位置在机器数的最低数值位之后,则是纯正数;若约定小数点的位置在机器数的最高位之前(符号位之后),则是纯小数。

为了便于运算,带符号的机器数可采用原码、反码和补码等不同的编码方法。

**
正数的反码与原码相同,负数的反码则是其绝对值按位取反
正数的补码与其原码和反码相同,负数的补码则等于其反码的末尾加1
二进制的小数点后面第一位正好表示的是2的-1次方,第二位是2的-2次方
**

原码表示法

原码表示法。数值X的原码记为[X]原,如果机器字长为n(即采用n个二进制位表示数据),则原码的定义如下:
XXX是纯整数,则
[X]原={X0≤X≤2n−1−12n−1+∣X∣−(2n−1−1)≤X≤0[X]_原= \begin{cases} X & 0 \leq X \leq 2^{n-1}-1 \\ 2^{n-1}+|X| & -(2^{n-1}-1) \leq X \leq 0 \end{cases}[X]={X2n1+X0X2n11(2n11)X0
XXX是纯小数,则
[X]原={X0≤X≤120+∣X∣−1<X≤0[X]_原= \begin{cases} X & 0 \leq X \leq 1 \\ 2^{0}+|X| & -1 < X \leq 0 \end{cases}[X]={X20+X0X11<X0
在原码表示法中,最高位是符号位,0表示正号,1表示负号,其余的n−1n-1n1位表示数值的绝对值。
数值0的原码表示有两种形式:[+0]原=00000000[−0]原=10000000[+0]_原=0 0000000 \\ [-0]_原=1 0000000[+0]=00000000[0]=10000000

反码表示法

反码表示法。数值XXX的反码记作[X]反[X]_反[X],如果机器字长为nnn,则反码定义如下:
XXX是纯整数,则
[X]反={X0≤X≤2n−1−12n−1+∣X∣−(2n−1−1)≤X≤0[X]_反= \begin{cases} X & 0 \leq X \leq 2^{n-1}-1 \\ 2^{n-1}+|X| & -(2^{n-1}-1) \leq X \leq 0 \end{cases}[X]={X2n1+X0X2n11(2n11)X0
XXX是纯小数,则
[X]反={X0≤X≤12−2−(n−1)+X−1<X≤0[X]_反= \begin{cases} X & 0 \leq X \leq 1 \\ 2-2^{-(n-1)}+X & -1 < X \leq 0 \end{cases}[X]={X22(n1)+X0X11<X0
在反码表示法中,最高位是符号位,0表示证号,1表示负号,正数的反码与原码相同,负数的反码则是其绝对值按位取反。
数值0的反码表示有两种形式:[+0]反=00000000[−0]反=11111111[+0]_反=0 0000000 \\ [-0]_反=1 1111111[+0]=00000000[0]=11111111

补码表示法

补码表示法。数值XXX的补码记作[X]补[X]_补[X],如果机器字长为nnn,则补码定义如下:
XXX是纯整数,则
[X]补={X0≤X≤2n−1−12n+∣X∣−(2n−1−1)≤X≤0[X]_补= \begin{cases} X & 0 \leq X \leq 2^{n-1}-1 \\ 2^{n}+|X| & -(2^{n-1}-1) \leq X \leq 0 \end{cases}[X]={X2n+X0X2n11(2n11)X0
XXX是纯小数,则
[X]补={X0≤X≤12+X−1<X≤0[X]_补= \begin{cases} X & 0 \leq X \leq 1 \\ 2+X & -1 < X \leq 0 \end{cases}[X]={X2+X0X11<X0
在补码表示法中,最高位为符号位,0表示正号,1表示符号,正数的补码与其原码和反码相同,负数的补码则等于其反码的末尾加1。在补码表示中,0有唯一的编码:[+0]补=00000000[−0]补=00000000[+0]_补=0 0000000 \\ [-0]_补=0 0000000[+0]=00000000[0]=00000000

移码表示法

移码表示法是在数XXX上增加一个偏移量来定义的,常用于浮点数中的阶码。如果机器字长为nnn,规定偏移量为2n−12^{n-1}2n1,则移码定义如下:
XXX是纯整数,则
[X]移=2n−1+X(−2n−1≤X<2n−1)[X]_移=2^{n-1}+X(-2^{n-1} \leq X < 2^{n-1})[X]=2n1+X(2n1X<2n1)
XXX是纯小数,则
[X]移=1+X(−1≤X<1)[X]_移=1+X(-1 \leq X < 1)[X]=1+X(1X<1)
实际上在偏移2n−12^{n-1}2n1的情况下,只要将补码的符号位取反即可获得相应的移码表示

所谓定点数,就是小数点位置固定不变的数。小数点的位置通常有两种约定方式:定点整数(纯整数,小数点在最低有效数值位之后)和定点小数(纯小数,小数点在最高有效数值位之前)

码制定点整数定点小数
原码−(2n−1−1)∼+(2n−1−1)-(2^{n-1}-1) \sim +(2^{n-1}-1)(2n11)+(2n11)−(1−2−(n−1))∼+(1−2−(n−1))-(1-2^{-(n-1)}) \sim +(1-2^{-(n-1)})(12(n1))+(12(n1))
反码−(2n−1−1)∼+(2n−1−1)-(2^{n-1}-1) \sim +(2^{n-1}-1)(2n11)+(2n11)−(1−2−(n−1))∼+(1−2−(n−1))-(1-2^{-(n-1)}) \sim +(1-2^{-(n-1)})(12(n1))+(12(n1))
补码−2n−1∼+(2n−1−1)-2^{n-1} \sim +(2^{n-1}-1)2n1+(2n11)−1∼+(1−2−(n−1))-1 \sim +(1-2^{-(n-1)})1+(12(n1))
移码−2n−1∼+(2n−1−1)-2^{n-1} \sim +(2^{n-1}-1)2n1+(2n11)−1∼+(1−2−(n−1))-1 \sim +(1-2^{-(n-1)})1+(12(n1))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值