原码,反码,补码,移码

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

原码

数值X的原码记为[X],如果机器字长为n,则原码的定义如下
若X是纯整数,则 [ X ]   原   = { X , 0 ≤ X ≤ 2 n − 1 − 1 2 n − 1 + ∣ X ∣ , - ( 2 n − 1 ) − 1 ≤ X ≤ 0 [X]~原~=\begin{cases} X, & \text0≤X≤2^{n-1}-1 \\ 2^{n-1}+|X|, & \text-(2^{n-1})-1≤X≤0 \end{cases} [X]  ={X,2n1+X,0X2n11-(2n1)1X0
若X是纯小数,则 [ X ]   原   = { X , 0 ≤ X ≤ 1 2 0 + ∣ X ∣ , - 1 ≤ X ≤ 0 [X]~原~=\begin{cases} X, & \text0≤X≤1 \\ 2^0+|X|, & \text-1≤X≤0 \end{cases} [X]  ={X,20+X,0X1-1X0

比如,机器字长n等于8:
[+1]原=0 0000001          	[+1]原=1 0000001          
[+127]原=0 1111111          [+127]原=1 1111111          
[+45]原=0 0101101           [+45]原=1 0101101          
[+0.5]原=0 ◇1000000 	    [+0.5]原=1 ◇1000000        

在原码表示法中,最高位是符号位,0表示正号,1表示负号,其余的n-1位表示数值的绝对值。数值0的原码有两种表示方式:[+0]=0 0000000,[-0]=1 0000000。

反码

数值X的反码记为[X],如果机器字长为n,则反码的定义如下
若X是纯整数,则 [ X ]   反   = { X , 0 ≤ X ≤ 2 n − 1 − 1 2 n − 1 + X , - ( 2 n − 1 ) − 1 ≤ X ≤ 0 [X]~反~=\begin{cases} X, & \text0≤X≤2^{n-1}-1 \\ 2^{n-1}+X, & \text-(2^{n-1})-1≤X≤0 \end{cases} [X]  ={X,2n1+X,0X2n11-(2n1)1X0
若X是纯小数,则
[ X ]   反   = { X , 0 ≤ X < 1 2 − 2 n − 1 + X , - 1 < X ≤ 0 [X]~反~=\begin{cases} X, & \text0≤X<1 \\ 2-2^{n-1}+X, & \text-1<X≤0 \end{cases} [X]  ={X,22n1+X,0X<1-1<X0

比如,机器字长n等于8:
[+1]反=0 0000001          	[+1]反=1 1111110          
[+127]反=0 1111111          [+127]反=1 0000000          
[+45]反=0 0101101           [+45]反=1 1010010          
[+0.5]反=0 ◇1000000 	    [+0.5]反=1 ◇0111111    

在反码表示法中,最高位是符号位,0表示正号,1表示负号,正数的反码与原码相同,负数的反码则是其绝对值按位取反。数值0的原码有两种表示方式:[+0]=0 0000000,[-0]=1 1111111。

补码

数值X的补码记为[X],如果机器字长为n,则补码的定义如下
若X是纯整数,则 [ X ]   补   = { X , 0 ≤ X ≤ 2 n − 1 − 1 2 n + X , - 2 n − 1 ≤ X ≤ 0 [X]~补~=\begin{cases} X, & \text0≤X≤2^{n-1}-1 \\ 2^{n}+X, & \text-2^{n-1}≤X≤0 \end{cases} [X]  ={X,2n+X,0X2n11-2n1X0
若X是纯小数,则
[ X ]   补   = { X , 0 ≤ X < 1 2 + X , - 1 ≤ X < 0 [X]~补~=\begin{cases} X, & \text0≤X<1 \\ 2+X, & \text-1≤X<0 \end{cases} [X]  ={X,2+X,0X<1-1X<0

比如,机器字长n等于8:
[+1]补=0 0000001          	[+1]补=1 1111111
[+127]补=0 1111111          [+127]补=1 0000001          
[+45]补=0 0101101           [+45]补=1 1010011         
[+0.5]补=0 ◇1000000 	    [+0.5]补=1 ◇1000000  

在补码表示法中,最高位是符号位,0表示正号,1表示负号,正数的补码与原码和反码相同,负数的补码则等于其反码的末位加1。数值0的补码有唯一的编码:[+0]=0 0000000,[-0]=0 0000000。

移码

移码表示法是在数X上增加一个偏移量来定义的,常用于表示浮点数中的阶码。如果机器字长为n,规定偏移量为2n-1,z则移码的定义如下
若X是纯整数,则[X]=2n-1+X;(-2n-1≤X<2n-1)
若X是纯小数,则[X]=1+X;(-1≤X<1)

比如,机器字长n等于8:
[+1]移=1 0000001          	[+1]移=101111111
[+127]移=1 1111111          [+127]移=0 0000001          
[+45]移=1 0101101           [+45]移=0 1010011         
[+0.5]移=1 ◇0000000 	    [+0.5]移=1 ◇0000000  

实际上,在偏移2n-1的情况下,只要将补码的符号位取反便可获得相应的移码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值