大家好,欢迎来到IT知识分享网。
机器数有无符号数和带符号数,无符号数表示正数, 在机器数中没有符号位.
对于无符号数, 若约定小数点的位置在机器数的最低位之后, 则是纯整数, 若小数点的位置在机器数的最高位之前, 则是纯小数.
对于带符号数, 机器数的最高位是表示正、负的符号位, 其余表示数值
为了便于运算, 带符号的机器数采用原码, 反码和补码等不同的编码方法, 机器数的这些编码方法成为码制。
原码, 反码, 补码
原码表示法
数值X
的原码记为[X]原
, 如果机器字长为n
(即采用n
个二进制表示数据), 则原码定位如下:
1. 若X
为纯整数, 则
[ X ] 原 = { X , 0 ≤ X ≤ 2 n − 1 − 1 2 n − 1 + ∣ X ∣ , – ( 2 n − 1 − 1 ) ≤ X ≤ 0 [X]_原 = \begin{cases} X, & \text 0\le X \le 2^{n-1}-1 \\ 2^n -1 +|X|, & \text -(2^{n-1} -1) \le X \le 0 \\ \end{cases} [X]原={
X,2n−1+∣X∣,0≤X≤2n−1−1–(2n−1−1)≤X≤0
2. 若X
为纯小数, 则
[ X ] 原 = { X , 0 ≤ X < 1 2 0 + ∣ X ∣ , – 1 < X ≤ 0 [X]_原 = \begin{cases} X, & \text 0\le X < 1 \\ 2^0 +|X|, & \text -1 < X \le0 \\ \end{cases} [X]原={
X,20+∣X∣,0≤X<1–1<X≤0
若机器字长为n
等于8,
[ + 1 ] 原 = 00000001 [ − 1 ] 原 = [+1]_原 = 00000001 \uad [-1]_原= \\ [+1]原=00000001[−1]原=
[ + 127 ] 原 = 0 [ − 127 ] 原 = [+127]_原 = 0 \uad [-127]_原= \\ [+127]原=0[−127]原=
在原码表示法中, 最高位为符号位, 0表示正号, 1表示负号, 其余n-1位表示数值的绝对值, 数值0的原码为
‘ [ + 0 ] 原 = 00000000 ‘ , [ − 0 ] 原 = `[+0]_原= 00000000`, [-0]_原= ‘[+0]原=00000000‘,[−0]原=
反码表示法
数值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, & \text 0\le X < 2^{n-1}-1 \\ 2^n-1 + X, & \text -(2^{n-1}-1) \le X \le 0 \\ \end{cases} [X]反={
X,2n−1+X,0≤X<2n−1−1–(2n−1−1)≤X≤0
当X
为纯小数时
[ X ] 反 = { X , 0 ≤ X < 1 2 − 2 − ( n − 1 ) + X , – 1 < X ≤ 0 [X]_反 = \begin{cases} X, & \text 0\le X \lt 1 \\ 2-2^{-(n-1)}+X, & \text -1 \lt X \le0 \\ \end{cases} [X]反={
X,2−2−(n−1)+X,0≤X<1–1<X≤0
[ + 1 ] 反 = 00000001 [ − 1 ] 反 = [+1]_反 = 00000001 \uad [-1]_反= \\ [+1]反=00000001[−1]反=
[ + 127 ] 反 = 0 [ − 127 ] 反 = [+127]_反 = 0 \uad [-127]_反= \\ [+127]反=0[−127]反=
在反码表示中, 最高位是符号位, 0表示正号, 1表示负号, 正数的反码与原码相同, 负数的反码则是其绝对值按位取反
数值0的反码有两种形式: [ + 0 ] 反 ∗ ∗ = ∗ ∗ 00000000 , [ − 0 ] 反 ∗ ∗ = ∗ ∗ [+0]反 = 00000000, [-0]反 = [+0]反∗∗=∗∗00000000,[−0]反∗∗=∗∗
补码表示法
数值X
的补码记作[X]补
, 如果机器字长为n
, 则
若X
是纯整数
[ X ] 补 = { X , 0 ≤ X ≤ 2 n − 1 − 1 2 n + X , – 2 n − 1 ≤ X ≤ 0 [X]_补 = \begin{cases} X, & \text 0\le X \le 2^{n-1}-1 \\ 2^n+X, & \text -2^{n-1} \le X \le0 \\ \end{cases} [X]补={
X,2n+X,0≤X≤2n−1−1–2n−1≤X≤0
若X
是纯小数
[ X ] 补 = { X , 0 ≤ X < 1 2 + X , – 1 ≤ X < 0 [X]_补 = \begin{cases} X, & \text 0\le X \lt 1 \\ 2+X, & \text -1 \le X \lt0 \\ \end{cases} [X]补={
X,2+X,0≤X<1–1≤X<0
示例:
[ + 1 ] 补 = 00000001 [ − 1 ] 补 = [+1]_补 = 00000001 \uad [-1]_补= \\ [+1]补=00000001[−1]补=
[ + 127 ] 补 = 0 [ − 127 ] 补 = [+127]_补 = 0 \uad [-127]_补= \\ [+127]补=0[−127]补=
正数的补码与其原码和反码相同, 负数的补码则等于其反码的末位加1
移码表示法
移码表示法是在数X
上增加一个偏移量来定义的, 常用于表示浮点中的阶码, 如果机器字长为n
, 规定偏移量为2n-1
[ X ] 移 = 2 n − 1 + X ( − 2 n − 1 ≤ X < 2 n − 1 ) [X]_移 = 2^{n-1} + X(-2^{n-1} \le X \lt 2^{n-1}) \\ [X]移=2n−1+X(−2n−1≤X<2n−1)
[ + 1 ] 移 = [ − 1 ] 移 = 0 [+1]_移 = \uad [-1]_移=0 \\ [+1]移=[−1]移=0
[ + 127 ] 移 = [ − 127 ] 移 = 00000001 [+127]_移 = \uad [-127]_移=00000001 \\ [+127]移=[−127]移=00000001
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/125159.html