1.原码,反码,补码,移码的表示
1-1 原码表示法
数值X的原码记为
[
X
]
原
[X]{_原}
[X]原(x为十进制),如果机器字长为n(采用n个二进制位表示数据),则原码的定义如下:
例1.1 若机器字长n=8,求+127,-127和+0.5,-0.5的原码表示:
- +127, 属于 纯整数正数:
+ 127 = [ + 127 ] 原 = 127 10 = 01111111 ( 2 ) ; 范 围 : 0 < = + 127 < = 127 ( 2 7 − 1 ) +127=[+127]{_原}=127{_{10}}=0 1111111{_{(2)}};范围:0<=+127<=127(2^{7}-1) +127=[+127]原=12710=01111111(2);范围:0<=+127<=127(27−1) - -127, 属于 纯整数负数:
− 127 = [ − 127 ] 原 = 256 10 = 11111111 ( 2 ) ; 范 围 : − 127 ( 2 7 − 1 ) < = − 127 < = 0 -127=[-127]{_原}=256{_{10}}=1 1111111{_{(2)}};范围:-127(2^{7}-1)<=-127<=0 −127=[−127]原=25610=11111111(2);范围:−127(27−1)<=−127<=0 - +0.5, 属于 纯小数正数:
+ 0.5 = [ + 0.5 ] 原 = 0.5 10 = 0.1000000 ( 2 ) ; 范 围 : 0 < = + 0.5 < 1 +0.5=[+0.5]{_原}=0.5{_{10}}=0 .1000000{_{(2)}};范围:0<=+0.5<1 +0.5=[+0.5]原=0.510=0.1000000(2);范围:0<=+0.5<1 - -0.5, 属于 纯小数负数:
− 0.5 = [ − 0.5 ] 原 = 1.5 10 = 1.1000000 ( 2 ) ; 范 围 : − 1 < = − 0.5 < = 0 -0.5=[-0.5]{_原}=1.5{_{10}}=1 .1000000{_{(2)}};范围:-1<=-0.5<=0 −0.5=[−0.5]原=1.510=1.1000000(2);范围:−1<=−0.5<=0
在原码表示法中,最高位是符号位,0代表正号,1代表负号,其余的n-1位表示数值的绝对值。
数值0的原码有两种表示形式:
[
+
0
]
原
=
00000000
;
[
−
0
]
原
=
10000000
;
[+0]{_原}=0 0000000;[-0]{_原}=1 0000000;
[+0]原=00000000;[−0]原=10000000;
1-2 反码表示法
数值X的反码记为
[
X
]
反
[X]{_反}
[X]反(x为十进制),如果机器字长为n(采用n个二进制位表示数据),则反码的定义如下:
例1.2 若机器字长n=8,求+127,-127和+0.5,-0.5的反码表示:
- +127, 属于 纯整数正数(和原码相同):
[ + 127 ] 反 = 01111111 ( 2 ) ; 范 围 : 0 < = + 127 < = 127 ( 2 7 − 1 ) [+127]{_反}=0 1111111{_{(2)}};范围:0<=+127<=127(2^{7}-1) [+127]反=01111111(2);范围:0<=+127<=127(27−1) - -127, 属于 纯整数负数(按原码的绝对值求反):
[ − 127 ] 反 = 10000000 ( 2 ) ; 范 围 : − 127 ( 2 7 − 1 ) < = − 127 < = 0 [-127]{_反}=1 0000000{_{(2)}};范围:-127(2^{7}-1)<=-127<=0 [−127]反=10000000(2);范围:−127(27−1)<=−127<=0 - +0.5, 属于 纯小数正数(和原码相同):
[ + 0.5 ] 反 = 0.1000000 ( 2 ) ; 范 围 : 0 < = + 0.5 < 1 [+0.5]{_反}=0 .1000000{_{(2)}};范围:0<=+0.5<1 [+0.5]反=0.1000000(2);范围:0<=+0.5<1 - -0.5, 属于 纯小数负数(按原码的绝对值求反):
[ − 0.5 ] 反 = 1.0111111 ( 2 ) ; 范 围 : − 1 < − 0.5 < = 0 [-0.5]{_反}=1 .0111111{_{(2)}}; 范围:-1<-0.5<=0 [−0.5]反=1.0111111(2);范围:−1<−0.5<=0
在反码表示法中,最高位是符号位,0代表正号,1代表负号,正数的反码与原码相同,负数的反码则是其绝对值按位求反。
数值0的反码有两种表示形式:
[
+
0
]
反
=
00000000
;
[
−
0
]
反
=
11111111
;
[+0]{_反}=0 0000000;[-0]{_反}=1 1111111;
[+0]反=00000000;[−0]反=11111111;
1-3 补码表示法
数值X的补码记为
[
X
]
补
[X]{_补}
[X]补(x为十进制),如果机器字长为n(采用n个二进制位表示数据),则补码的定义如下:
例1.2 若机器字长n=8,求+127,-127和+0.5,-0.5的补码表示:
- +127, 属于 纯整数正数(和原码、反码相同):
[ + 127 ] 反 = 01111111 ( 2 ) ; 范 围 : 0 < = + 127 < = 127 ( 2 7 − 1 ) [+127]{_反}=0 1111111{_{(2)}};范围:0<=+127<=127(2^{7}-1) [+127]反=01111111(2);范围:0<=+127<=127(27−1) - -127, 属于 纯整数负数(负数的补码则等于其反码的末尾加1):
[ − 127 ] 反 = 10000001 ( 2 ) ; 范 围 : − 128 ( 2 7 − 1 ) < = − 127 < = 0 [-127]{_反}=1 0000001{_{(2)}};范围:-128(2^{7}-1)<=-127<=0 [−127]反=10000001(2);范围:−128(27−1)<=−127<=0 - +0.5, 属于 纯小数正数(和原码、反码相同):
[ + 0.5 ] 反 = 0.1000000 ( 2 ) ; 范 围 : 0 < = + 0.5 < 1 [+0.5]{_反}=0 .1000000{_{(2)}};范围:0<=+0.5<1 [+0.5]反=0.1000000(2);范围:0<=+0.5<1 - -0.5, 属于 纯小数负数(负数的补码则等于其反码的末尾加1):
[ − 0.5 ] 反 = 1.1000000 ( 2 ) ; 范 围 : − 1 < = − 0.5 < 0 [-0.5]{_反}=1 .1000000{_{(2)}}; 范围:-1<=-0.5<0 [−0.5]反=1.1000000(2);范围:−1<=−0.5<0
在补码表示法中,最高位是符号位,0代表正号,1代表负号,正数的补码与其原码和反码相同,负数的补码则等于其反码的末尾加1。
在补码表示中,0有唯一的编码:: [ + 0 ] 补 = 00000000 ; [ − 0 ] 补 = 00000000 ; [+0]{_补}=0 0000000;[-0]{_补}=0 0000000; [+0]补=00000000;[−0]补=00000000;
1-4 移码表示法
移码表示法是在数X上增加一个偏移量来定义的,常用于表示浮点数中的阶码。如果机器字长为n(采用n个二进制位表示数据),规定偏移量为 2 n − 1 2^{n-1} 2n−1,则移码的定义如下:
- 若X是纯整数, [ X ] 移 = 2 n − 1 + X [X]{_移}=2^{n-1}+X [X]移=2n−1+X ,取值范围: − 2 n − 1 < = X < 2 n − 1 -2^{n-1}<=X<2^{n-1} −2n−1<=X<2n−1
- 若X是纯小数, [ X ] 移 = 1 + X [X]{_移}=1+X [X]移=1+X ,取值范围: − 1 < = X < 1 -1<=X<1 −1<=X<1
例1.2 若机器字长n=8,求+127,-127和+0.5,-0.5的移码表示:
- +127, 属于 纯整数(补码的符号位取反):
[ + 127 ] 反 = 11111111 ( 2 ) ; 范 围 : − 127 ( 2 7 − 1 ) < = + 127 < 127 ( 2 7 − 1 ) [+127]{_反}=1 1111111{_{(2)}};范围:-127(2^{7}-1)<=+127<127(2^{7}-1) [+127]反=11111111(2);范围:−127(27−1)<=+127<127(27−1) - +0.5, 属于 纯小数(补码的符号位取反):
[ + 0.5 ] 反 = 1.1000000 ( 2 ) ; 范 围 : − 1 < = + 0.5 < 1 [+0.5]{_反}=1 .1000000{_{(2)}};范围:-1<=+0.5<1 [+0.5]反=1.1000000(2);范围:−1<=+0.5<1
在偏移 2 n − 1 2^{n-1} 2n−1的情况下,只要将补码的符号位取反便可获取相应的移码表示。在移码表示中,0有唯一的编码: [ + 0 ] 移 = 10000000 ; [ − 0 ] 移 = 10000000 ; [+0]{_移}=1 0000000;[-0]{_移}=1 0000000; [+0]移=10000000;[−0]移=10000000;
2. 定点数
- 定义:定点数,就是小数点位置固定不变的数。分为定点小数(纯小数)和定点整数(纯整数)。
- 码制表示下带符号数的范围。
机器字长为n。
3. 浮点数
浮点数所能表示的数值范围
主要由阶码
决定,所表示数值的精度
则由尾数
决定。
规格化浮点数:规格化就是将尾数的绝对值限定在区间[0.5,1]。
-
浮点数的运算
N = M ∗ R e N=M*R^{e} N=M∗Re
M为尾数,e为指数,R为基数 -
表示格式:
阶符 | 阶码 | 数符 | 尾数 |
---|
例如:
十进制中 83.125 相当于: 1 0 3 ∗ 0.083125 10^3*0.083125 103∗0.083125
二进制中 1011.10101 相当于: 2 4 ∗ 0.101110101 2^4*0.101110101 24∗0.101110101
-
浮点数表示数值范围
如果浮点数阶码(包括一位阶符)用R位的移码表示, 尾数(包括一位阶符)用M的补码表示,则这种浮点数所能表示的数值范围:- 最大正数:
+ ( 1 − 2 − M + 1 ) ∗ 2 2 R − 1 − 1 +(1-2^{-M+1})*2^{2^{R-1}-1} +(1−2−M+1)∗22R−1−1 - 最小负数:
− 1 ∗ 2 2 R − 1 − 1 -1*2^{2^{R-1}-1} −1∗22R−1−1
- 最大正数:
-
工业标准IEEE 754:
( − 1 ) S 2 E ( b 0 b 1 b 2 b 3 ⋅ ⋅ ⋅ b p − 1 ) (-1)^{S}2^{E}(b_0b_1b_2b_3···b_{p-1}) (−1)S2E(b0b1b2b3⋅⋅⋅bp−1)
其中,(-1)^{S}为该浮点数的数符,当S为0时表示正数,为1时表示负数;E为指数(阶码),用移码表示; b 0 b 1 b 2 b 3 ⋅ ⋅ ⋅ b p − 1 b_0b_1b_2b_3···b_{p-1} b0b1b2b3⋅⋅⋅bp−1为尾数,其长度为P位用原码表示。