常见的进制
{\quad}二进制:0,1
{\quad}八进制:0,1,2,3,4,5,6,7
{\quad}十进制:0,1,2,3,4,5,6,7,8,9
{\quad}十六进制:0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F
任意进制→十进制
{\quad}二进制:10010.1 {\qquad}{\quad} 1* 242^424 +0*232^323+0*222^222+1*212^121+0*202^020+1*2−12^{-1}2−1
{\quad}八进制:251.5 {\qquad}{\qquad} 2* 828^282 +5*818^181+1*808^080+5*8−18^{-1}8−1
{\quad}十六进制:AE86.1{\qquad}{\quad} 10* 16316^3163 +14*16216^2162+8*16116^1161+6*16016^0160+1*16−116^{-1}16−1
常用2的次方
2−32^{-3}2−3 | 2−22^{-2}2−2 | 2−12^{-1}2−1 | 202^020 | 212^121 | 222^222 | 232^323 | 242^424 | 252^525 | 262^626 | 272^727 | 282^828 | 292^929 | 2102^{10}210 | 2112^{11}211 | 2122^{12}212 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0.125 | 0.25 | 0.5 | 1 | 2 | 4 | 8 | 16 | 32 | 64 | 128 | 256 | 512 | 1024 | 2048 | 4096 |
二进制→八进制
3位一组,每组转换为八进制符号
0011\frac{001}{1}10011117\frac{111}{7}71110000\frac{000}{0}00000102\frac{010}{2}2010.0113\frac{011}{3}30110102\frac{010}{2}2010
八进制→二进制
每位八进制对应3位二进制
(251.5)8(251.5)_8(251.5)8 →(010 101 001.101)2(010\ 101\ 001.101)_2(010 101 001.101)2
二进制→十六进制
4位一组,每组转换为十六进制符号
00113\frac{0011}{3}300111100C\frac{1100}{C}C110000102\frac{0010}{2}2001001106\frac{0110}{6}60110.10008\frac{1000}{8}81000
十六进制→二进制
每位十六进制对应4位二进制
(AE86.1)16(AE86.1)_{16}(AE86.1)16 →(1010 1110 1000 0110.0001)2(1010\ 1110\ 1000\ 0110.0001)_2(1010 1110 1000 0110.0001)2
十进制→任意进制
十进制转R进制使用短除法
例:将94转换为二进制
被除数 | 除数 | 余数 |
---|---|---|
2 | 94 | 0 |
2 | 47 | 1 |
2 | 23 | 1 |
2 | 11 | 1 |
2 | 5 | 1 |
2 | 2 | 0 |
2 | 1 | 1 |
转换完成的二进制为(由下往上):1011110
数据的表示——真值和机器数
15→1111\qquad+15→0 11110\ 11110 1111
8→1000\qquad-8→1 10001\ 10001 1000
真值:符合人类习惯的数字
机器数:数字实际存到机器的形式,正负号需要数字化,其中0表示正,1表示负
定点数VS浮点数
定点数:小数点的位置固定\qquad例:996.07——常规计数
浮点数:小数点的位置不固定\qquad例:9.9607* 10210^2102——科学计数
定点数的表示{无符号数有符号数{原码反码补码移码
定点数的表示\begin{cases}
无符号数\\
\\
有符号数\begin{cases}
原码\\
反码\\
补码\\
移码
\end{cases}
\end{cases}
定点数的表示⎩⎨⎧无符号数有符号数⎩⎨⎧原码反码补码移码
无符号数:整个机器字长全部二进制位均为数值位,相当于绝对值,通常只有无符号整数,没有无符\qquad\qquad号小数。
原码
原码:用数值部分表示真值的绝对值,符号位“0/1”,对应“正/负”
常写为:[x]原[x]_原[x]原=1 00100111\ 00100111 0010011
若机器字长n+1位,原码整数的表示范围:-(2n2^n2n-1)=<x=<(2n2^n2n-1)
真值0有+0和-0两种形式
[+0]原[+0]_原[+0]原=0 000 00000\ 000\ 00000 000 0000\qquad[−0]原[-0]_原[−0]原=1 000 00001\ 000\ 00001 000 0000
反码
反码:若符号位为0,则反码与原码相同
\qquad 若符号位为1, 则数值位全部取反
x=+19D\qquad[x]原[x]_原[x]原=0 001 00110\ 001\ 00110 001 0011
\qquad\qquad\quad[x]反[x]_反[x]反=0 001 00110\ 001\ 00110 001 0011
x=-19D\qquad [x]原\ [x]_原 [x]原=1 001 00111\ 001\ 00111 001 0011
\qquad\qquad\quad[x]反[x]_反[x]反=1 110 11001\ 110\ 11001 110 1100
若机器字长n+1位,反码整数的表示范围:-(2n2^n2n-1)=<x=<(2n2^n2n-1)
真值0有+0和-0两种形式
[+0]原[+0]_原[+0]原=0 000 00000\ 000\ 00000 000 0000\qquad[−0]原[-0]_原[−0]原=1 000 00001\ 000\ 00001 000 0000
[+0]反[+0]_反[+0]反=0 000 00000\ 000\ 00000 000 0000\qquad[−0]反[-0]_反[−0]反=1 111 11111\ 111\ 11111 111 1111
补码
补码:正数的补码=原码
\qquad 负数的补码=反码末尾+1(要考虑进位)
x=+19D\qquad[x]原[x]_原[x]原=0 001 00110\ 001\ 00110 001 0011
\qquad\qquad\quad[x]反[x]_反[x]反=0 001 00110\ 001\ 00110 001 0011
\qquad\qquad\quad[x]补[x]_补[x]补=0 001 00110\ 001\ 00110 001 0011
x=-19D\qquad [x]原\ [x]_原 [x]原=1 001 00111\ 001\ 00111 001 0011
\qquad\qquad\quad[x]反[x]_反[x]反=1 110 11001\ 110\ 11001 110 1100
\qquad\qquad\quad[x]补[x]_补[x]补=1 110 11011\ 110\ 11011 110 1101
[+0]原[+0]_原[+0]原=0 000 00000\ 000\ 00000 000 0000\qquad[−0]原[-0]_原[−0]原=1 000 00001\ 000\ 00001 000 0000
[+0]反[+0]_反[+0]反=0 000 00000\ 000\ 00000 000 0000\qquad[−0]反[-0]_反[−0]反=1 111 11111\ 111\ 11111 111 1111
[+0]补[+0]_补[+0]补=0 000 00000\ 000\ 00000 000 0000\qquad[−0]补[-0]_补[−0]补=0 000 00000\ 000\ 00000 000 0000
[+0]补[+0]_补[+0]补=[−0]补[-0]_补[−0]补=0 000 00000\ 000\ 00000 000 0000
注:补码的真值0只有一种形式!!!
定点整数补码[x]补[x]_补[x]补=1 000 00001\ 000\ 00001 000 0000,表示x=-272^727
若机器字长n+1位,补码整数的表示范围:
-2n2^n2n=<x=<(2n2^n2n-1),比原码多表示一个-2n2^n2n
移码
移码:补码的基础上将符号位取反,移码只能用于表示整数
x=+19D\qquad[x]原[x]_原[x]原=0 001 00110\ 001\ 00110 001 0011
\qquad\qquad\quad[x]反[x]_反[x]反=0 001 00110\ 001\ 00110 001 0011
\qquad\qquad\quad[x]补[x]_补[x]补=0 001 00110\ 001\ 00110 001 0011
\qquad\qquad\quad[x]移[x]_移[x]移=1 001 00111\ 001\ 00111 001 0011
x=-19D\qquad [x]原\ [x]_原 [x]原=1 001 00111\ 001\ 00111 001 0011
\qquad\qquad\quad[x]反[x]_反[x]反=1 110 11001\ 110\ 11001 110 1100
\qquad\qquad\quad[x]补[x]_补[x]补=1 110 11011\ 110\ 11011 110 1101
\qquad\qquad\quad[x]移[x]_移[x]移=0 110 11010\ 110\ 11010 110 1101
[+0]原[+0]_原[+0]原=0 000 00000\ 000\ 00000 000 0000\qquad[−0]原[-0]_原[−0]原=1 000 00001\ 000\ 00001 000 0000
[+0]反[+0]_反[+0]反=0 000 00000\ 000\ 00000 000 0000\qquad[−0]反[-0]_反[−0]反=1 111 11111\ 111\ 11111 111 1111
[+0]补[+0]_补[+0]补=0 000 00000\ 000\ 00000 000 0000\qquad[−0]补[-0]_补[−0]补=0 000 00000\ 000\ 00000 000 0000
[+0]移[+0]_移[+0]移=1 000 00001\ 000\ 00001 000 0000\qquad[−0]移[-0]_移[−0]移=1 000 00001\ 000\ 00001 000 0000
[+0]移[+0]_移[+0]移=[−0]移[-0]_移[−0]移=1 000 00001\ 000\ 00001 000 0000
注:移码的真值0只有一种形式!!!
若机器字长n+1位,移码整数的表示范围:
-2n2^n2n=<x=<(2n2^n2n-1),与补码相同
浮点数
浮点数:浮点数是小数点位置不固定的数,它能表示更大范围的数。
表示格式: 阶符\qquad阶码\qquad数符\qquad尾数
阶码常为带符号的纯整数,尾数为带符号的纯小数
浮点数通常表示成:N=M*RER^ERE
其中,M为尾数,R为基数,E为阶码
阶码:决定浮点数的数值范围
尾数:决定浮点数的数值精度
校验码:海明码
海明码的构成方法:在数据位之间插入k个校验码,通过扩大码距来实现检错和纠错。
设数据位n位,检验为k位,则n和k必须满足以下关系:
2k2^k2k-1>=n+k