定点数表⽰⽅法——原码,补码,反码,移码
1. 真值和机器数
真值:数的实际值,⽤正负号和绝对值的某进制形式来表⽰,如+1010,-12,-FFFF等.
机器数:真值在计算机中的⼆进制表⽰,特点是符号数字化且数的⼤⼩受机器字长限制,其表⽰形式有原码,补码,反码,移码等.
2. 原码.
1). 定点⼩数:
\[{x_{[{\rm{原}}]}} = \left\{ {\begin{array}{*{20}{l}}
{x,0 \le x < 1}\\
{{2^0} - x = {2^0} + \left| x \right|, - 1 < x \le 0}
\end{array}} \right.\]
(其中x[原]是机器数,x是真值,最⾼位为符号位,下同.)
表⽰范围:
\[\max = 1 - {2^{ - n}},\min = - (1 - {2^{ - n}})\]
(n是指x除符号位的位数,下同)
如: x=+0.1011, x[原]=0.1011
x=-0.1011, x[原]=1.1011
2). 定点整数:
\[{x_{[原]}} = \left\{ \begin{array}{l}
x,0 \le x < {2^{\rm{n}}}\\
{2^n} - x = {2^n} + |x|, - {2^n} < x \le 0
\end{array} \right.\]
表⽰范围:
\[\max = {2^n} - 1,\min = - ({2^n} - 1)\]
如:x=+1011,x[原]=01011
x=-1011,x[原]=11011
3). 特点:
原码实质上为符号位加上数的绝对值,0正1负;
原码零有两个编码,+0和 -0编码不同,表⽰不唯⼀;
原码加减运算复杂,乘除运算规则简单;
原码表⽰简单,易于同真值之间进⾏转换.
3. 补码
1). 定点⼩数:
\[{x_{[补]}} = \left\{ \begin{array}{l}
x,0 \le x < 1\\
2 + x = 2 - |x|, - 1 \le x \le 0
\end{array} \right.(\bmod 2)\]
表⽰范围:
\[\max = 1 - {2^{ - n}},\min = - 1\]
如:x=+0.1011, x[补]=0.1011
x=-0.1011, x[补]=10+x=10.0000-0.1011=1.0101
2). 定点整数:
\[{x_{[补]}} = \left\{ {\begin{array}{*{20}{l}}
{x,0 \le x < {2^{\rm{n}}},0 \le x < {2^n}}\\
{{2^{n + 1}} + x = {2^{n + 1}} - |x|, - {2^n} \le x \le 0}
\end{array}(\bmod {2^{n + 1}})} \right.\]
表⽰范围:
\[\max = {2^n} - 1,\min = - {2^n}\]
如:x=+1011,x[补]=01011
x=-1011, x[补]=2^5 – |-1011|=100000 – 1011=10101
3). 特点
负数补码实质上为原码除符号位按位取反再加1
补码最⾼⼀位为符号位,0正1负;
补码零有唯⼀编码;
补码能很好⽤于加减运算;
补码满⾜x[补]+(-x)[补]=0;
补码最⼤的优点在于能够将减法运算转换成加法运算,其中符号位参与运算,它满⾜:
\[\begin{array}{*{20}{l}}
{{{(x{\rm{ }} + {\rm{ }}y)}_{\left[ 补 \right]}} = {\rm{ }}{x_{\left[ 补 \right]}} + {\rm{ }}{y_{\left[ 补 \right]}}}\\ {{{(x{\rm{ }} - {\rm{ }}y)}_{\left[ 补 \right]}} = {\rm{ }}{x_{\left[ 补 \right]}} + {\rm{ (}} - y{)_{\left[ 补 \right]}}} \end{array}\]
例如:
\[\begin{array}{l}
x = {11_{[10]}} = {1011_{[2]}},y = {5_{[10]}} = {0101_{[2],}}\\
{(x - y)_{[补]}} = {x_{[补]}} + {( - y)_{[补]}} = 01011 + 11011 = 100110(溢出) = 00110 = {6_{[10]}} = x - y\;\; \end{array}\]
4). 补码和原码转换.
正数:x[补]=x[原]
负数:按位取反,末位加1(符号位除外)
如:x= -1001001, x[原]=11001001,x[补]=10110110+1=10110111
5). 补码和真值的转换
\[{\rm{补码}}\left\{ \begin{array}{l}
{\rm{符号 = }}0{\rm{ - 正}},{\rm{余下为数值部分}}\\
{\rm{符号 = }}1{\rm{ - 负}},{\rm{余下求补为数值部分}}
\end{array} \right.\]
4. 反码
1). 定点⼩数
\[{x_{[{\rm{反}}]}} = \left\{ {\begin{array}{*{20}{l}}
{x,0 \le x < 1}\\
{(2 - {2^{ - n}}) + x = 2 + x - {2^{ - n}}, - 1 < x \le 0}
\end{array}} \right.\]
范围:
\[\max = 1 - {2^{ - n}},\min = - (1 - {2^{ - n}})\]
如:x=0.1011,x[反]=0.1011
x=-0.1011,x[反]=1.0100
2). 定点整数
\[{x_{[{\rm{反}}]}} = \left\{ {\begin{array}{*{20}{l}}
{x,0 \le x < {2^{\rm{n}}}}\\
{({2^{n + 1}} - 1) + x = {2^{n + 1}} + x - 1, - {2^n} < x \le 0}
\end{array}} \right.\]
范围:
\[\max = {2^n} - 1,\min = - ({2^n} - 1)\]
如:x=1011,x[反]=01011
x=-1011,x[反]=10100
3). 特点
负数反码实质上为原码除符号按位求反,也就是补码-1;
反码零有两个编码,+0 和 -0 的编码不同;
反码难以⽤于加减运算;
反码的表⽰范围与原码相同.
5. 移码:⽤于表⽰浮点数的阶码
1). 定义
\[x[移] = {2^n} + x, - {2^n} \le x < {2^n}\]
范围:
\[\max = {2^{n + 1}} - 1,\min = 0\]
如:x=+1011,x[移]=11011
x=-1011,x[移]=00101
2). 特点
移码中符号位表⽰的规律与原码,补码,反码相反——"1"正"0"负;
移码为全0时所对应的真值最⼩,为全1时所对应的真值最⼤,移码的⼤⼩直观地反映了真值的⼤⼩,这有助于两个浮点数进⾏⼤⼩⽐较; 真值0在移码中的表⽰形式是唯⼀的;
移码把真值映射到⼀个正数域,所以可将移码视为⽆符号数,直接按⽆符号数规则⽐较⼤⼩;
同⼀数值的移码和补码除最⾼位相反外,其他各位相同.
3). 移码和补码转换
补码的最小负数\[\begin{array}{l}
{x_{[补]}} = \left\{ \begin{array}{l}
x,0 \le x < {2^n}\\
{2^{n + 1}} + x, - {2^n} \le x \le 0
\end{array} \right.\\
{x_{[移]}} = {2^n} + x, - {2^n} \le x < {2^n}\\
{x_{[移]}} = \left\{ \begin{array}{l}
{x_{[补]}} + {2^n},0 \le x < {2^n}\\
{x_{[补]}} + {2^n} - {2^{n + 1}} = {x_{[补]}} - {2^n}, - {2^n} \le x \le 0 \end{array} \right.
\end{array}\]
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论