2.1 进位计数制
r进制转换成十进制: ( a n a n − 1 … a 0 . a − 1 a − 2 … a − n ) r = a n ⋅ r n + a n − 1 ⋅ r n − 1 + … a − n ⋅ r − n (a_n a_{n-1}\dots a_0.a_{-1}a_{-2}\dots a_{-n})_r=a_n\cdot r^n +a_{n-1}\cdot r^{n-1}+\dots a_{-n}\cdot r^{-n} (anan−1…a0.a−1a−2…a−n)r=an⋅rn+an−1⋅rn−1+…a−n⋅r−n
十进制转换成R进制:
-
整数部分的转换
除基取余,上低下高。用r去除十进制数,取余数,最开始的是低位然后增长向高位
-
小数部分的转换
乘基取整,上高下低。用r去乘十进制数的小数部分,取整数部分,最开始的是高位,向低位拓展。如果总得不到0,这种情况下得到的是近似值。
定点数:小数点位置约定在固定位置
- 定点整数:小数点固定在数字的最右端
- 定点小数:小数点固定在数字的最左端
浮点数:小数点位置约定可以浮动变化
X
=
(
−
1
)
s
×
M
×
R
e
X=(-1)^{s}\times M \times R^e
X=(−1)s×M×Re
其中:S取值0或1,对应符号+或-
M作为一个二进制定点小数,表示X的尾数
R为基数
E为指数,决定小数点的位置
2.2 实数的表示
2.2.1 定点数
定点数的几种编码表示方法
-
原码表示法
一个数的原码表示由符号位直接跟数值位构成,编码规则如下:
(1)当 X T X_T XT为正数时, X n − 1 = 0 , X i = X i ′ ( 0 ≤ i ≤ n − 2 ) X_{n-1}=0,X_i=X_i^{'}(0\le i \le n-2) Xn−1=0,Xi=Xi′(0≤i≤n−2)
(2)当 X T X_T XT为负数时, X n − 1 = 1 , X i = X i ′ ( 0 ≤ i ≤ n − 2 ) X_{n-1}=1,X_i=X_i^{'}(0\le i\le n-2) Xn−1=1,Xi=Xi′(0≤i≤n−2)
显然0有两种表示: [ + 0 ] 原 = 000 ⋯ 0 , [ − 0 ] 原 = 100 ⋯ 0 [+0]_原=000\cdots0,[-0]_原=100\cdots0 [+0]原=000⋯0,[−0]原=100⋯0
-
补码表示法
模运算
如果 A = B + K × M A=B+K\times M A=B+K×M(K为整数),则记作 A ☰ B ( m o d M ) A☰B(mod\space M) A☰B(mod M),称 B , A B,A B,A为模 M M M同余。
结论1:一个负数的补码等于模减该负数的绝对值
结论2:对于某一确定的模,某数减去小于模的另一数,总可以用该数加上另一数负数的补码来代替。
补码(取反+1):
定点整数: [ X ] 补 = 2 n + X ( − 2 n − 1 ≤ X < 2 n − 1 , m o d 2 n ) [X]_补=2^n+X (-2^{n-1}\le X \lt 2^{n-1},mod \space 2^n) [X]补=2n+X(−2n−1≤X<2n−1,mod 2n)
定点小数: [ X ] 补 = 2 + X ( − 1 ≤ X < 1 , m o d 2 ) [X]_补=2+X(-1\le X \lt1,mod\space 2) [X]补=2+X(−1≤X<1,mod 2)
-
反码表示法
负数的补码可用“取反加1”得到,若仅取反不加1,就能得到负数的反码表示,很少被使用
-
移码表示法
浮点数实际上使用两个定点数来表示的,用定点小数表示浮点数的尾数,定点整数表示浮点数的阶(即指数)。假设用来表示阶 E E E的移码的位数为 n n n,则 [ E ] 移 = 偏移常数 + E [E]_移=偏移常数+E [E]移=偏移常数+E,通常偏移常数取 2 n − 1 2^{n-1} 2n−1或 2 n − 1 − 1 2^{n-1}-1 2n−1−1(全0的时候),或
[ x ] 移 = 2 n + x ( x n > x ≥ − 2 n ) , n 为整数真值位数 [x]_移=2^n+x(x^n\gt x \ge -2^n),n为整数真值位数 [x]移=2n+x(xn>x≥−2n),n为整数真值位数
机器中数据的位排列顺序
LSB(Least Bit) 表示最低有效位
MSB(Most Significant Bit) 表示最高有效位
以后均默认LSB在最右边,MSB在最左边
2.2.2浮点数
Sign bit (1bit) | Exponent (float:8bits) | Significand(float:23bits) |
---|
V a l u e = ( − 1 ) S ⋅ ( 1 + S i g n i f i c a n d ) ⋅ 2 e − b i a s , b i a s = 2 n − 1 − 1 ( I E E E 754 ) Value=(-1)^S\cdot (1+Significand)\cdot 2^{e-bias},bias=2^{n-1}-1(IEEE\ 754) Value=(−1)S⋅(1+Significand)⋅2e−bias,bias=2n−1−1(IEEE 754)
特殊情况
-
+0和-0:
指数和尾数全为0,符号为0则为+0,为1则为-1
-
+ ∞ / − ∞ +\infty/-\infty +∞/−∞
指数全1,尾数全0,符号位0则为+,为1则为-
-
无定义数(NaN)
指数全1,尾数不为0,则为NaN(非数)
-
非规格数
Exponent Significand Object 0 0 +0/-0 0 nonzero Denorms(bias= 2 n − 1 − 1 2^{n-1}-1 2n−1−1) 1 ∼ 2 n − 1 − 2 1\sim 2^{n-1}-2 1∼2n−1−2 anything implicit leading 1 Norms 2 n − 1 2^{n-1} 2n−1 0 ± ∞ \pm \infty ±∞ 2 n − 1 2^{n-1} 2n−1 nonzero NaN
数据类型转换:
- i n t → f l o a t int \rightarrow float int→float:不会溢出,精度降低
- i n t / f l o a t → d o u b l e int/float \rightarrow double int/float→double:不会溢出,精度不降低
- d o u b l e → f l o a t double\rightarrow float double→float:可能溢出,精度降低
- f l o a t / d o u b l e → i n t float/double\rightarrow int float/double→int:向0方向截断,可能溢出
2.3 非数值数据
2.3.1 非数值数据的表示
-
逻辑数据
表示:用一位表示。1真0假,N位二进制数表示N个逻辑数据
运算:按位进行,与、或、左移、右移
识别:形式上与数值数据无区别,机器靠指令识别
位串:用来表示若干个状态位或控制位(OS中使用较多)
-
西文:ASCII码
-
汉字:
编码形式
- 输入码:对汉字用相应按键进行编码表示,用于输入
- 内码:用于在系统中进行存储、查找、传送等处理
- 字模点阵或轮廓描述:用于显示/打印
2.3.2 数据的宽度
比特是计算机中处理、存储、传输信息的最小单位
二进制信息的计量单位是"字节"(byte),也称"位组",8位,1字是4位。
2.3.3 数据的存储排列
大端方式(Big Endian):高位(MSB)所在的地址是数的地址
小端方式(Little Endian):低位(LSB)所在的地址是数的地址
字节的反,字节内的两个比特默认从高到低。
假定小端机器中指令:mov AX, 0x12345(BX)
其中操作码mov为40H,寄存器AX和BX的编号分别为0001B,0010B,立即数占32位。则:
小端 | 40 | 1 | 2 | 45 23 01 00 |
---|---|---|---|---|
大端 | 40 | 1 | 2 | 00 01 23 45 |
只需要考虑指令中立即数的顺序。
对齐(Alignment)
按边界对齐(假定存储字的宽度位32位,按字节编址)
- 字地址:4的倍数(低两位为0)
- 半字地址:2的倍数(低位为0)
- 字节地址:任意