软件设计师1--数据的表示
考点1:进制转换
整型的4种进制形式
- 十进制: 都是以0-9这九个数字组成,不能以0开头。
- 二进制: 由0和1两个数字组成。
- 八进制: 由0-7数字组成,为了区分与其他进制的数字区别,开头都是以0开始。
- 十六进制:由0-9和A-F组成。为了区分于其他数字的区别,开头都是以0x开始。
进制转换速记表格
十进制 | 二进制 | 八进制 | 十六进制 |
---|---|---|---|
0 | 0 | 0 | 0 |
1 | 1 | 1 | 1 |
2 | 10 | 2 | 2 |
3 | 11 | 3 | 3 |
4 | 100 | 4 | 4 |
5 | 101 | 5 | 5 |
6 | 110 | 6 | 6 |
7 | 111 | 7 | 7 |
8 | 1000 | 10 | 8 |
9 | 1001 | 11 | 9 |
10 | 1010 | 12 | A |
11 | 1011 | 13 | B |
12 | 1100 | 14 | C |
13 | 1101 | 15 | D |
14 | 1110 | 16 | E |
15 | 1111 | 17 | F |
进制 | 码数 | 基数 | 位权 |
---|---|---|---|
十进制(D) | 0,1,2,3,4,5,6,7,8,9 | 10 | 10k |
二进制(B) | 0,1 | 2 | 2k |
十六进制(H) | 0~9,A,B,C,D,E,F | 16 | 16k |
数据的表示-按权展开法
- R进制转十进制使用按权展开法,其具体操作方式为:将R进制位的每一位数值用Rk形式表示,即幂的底数是R,指数为k,k与该位和小数点之间的距离有关。当该位位于小数点左边,k值是该位和小数点之间数码的个数,而当该位位于小数点右边,k值是负值,其绝对值是该位和小数点之间码数的个数加1.
- 例如二进制10100.01=1×24+1×22+1×-2
- 例如七进制604.01=6×72+4×70+1×7-2
通俗点讲就是把10100.01看成十进制的数字,10100.01=1×104+1×102+1×-2=10000+100+0.01,如果是二进制就把10转换成2,如果是七进制就把10转换成7。
数据的表示-短除法
- 十进制转R进制使用短除法(除基取余法)。
例如将94转换为二进制数。
2|94 余0
2|47 余1
2|23 余1
2|11 余1
2|5 余1
2|2 余0
2|1 余1
0
得到结果为1011110,结果取余数从小往上取。
例如将94转换为十六进制数。
16|94 余14 十六进制中E代表14
16|5 余5
0
得到结果为5E,结果取余数从小往上取。
例如将5EH转为十进制数。
5E=5×161+14×160
数据的表示-减法
- 十进制转二进制使用减法。
例如将94转换为二进制数。
小于且离94最近的乘幂为64
94-64=30(26=64)
小于且离30最近的乘幂为16
30-16=14(24=16)
小于且离14最近的乘幂为8
14-8=6(23=8)
小于且离6最近的乘幂为4
6-4=2(22=4)
小于且离2最近的乘幂为2
2-2=0(21=2)
结束
位号 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
---|---|---|---|---|---|---|---|
取值 | 1 | 0 | 1 | 1 | 1 | 1 | 0 |
得到结果为1011110
20=1 26=64
21=2 27=128
22=4 28=256
23=8 29=512
24=16 210=1024
25=32
数据的表示-进制转换
- 二进制(10001110)转八进制与十六进制
二进制 | 010 001 110 |
---|---|
八进制 | 2 1 6 |
二进制转八进制三位一转换,不足三位在前面补0
二进制 | 010001110 |
---|---|
十六进制 | 8 E |
二进制转十六进制四位一转换,不足四位在前面补0
考点2:码制(原码/反码/补码/移码)
数据的表示-原码/反码/补码/移码
- 原码:最高位是符号位,其余低位表示数值的绝对值
- 反码:正数的反码与原码相同,负数的反码是其绝对值按位取反(符号位不变)
- 补码:整数的补码与原码相同,负数的补码是其反码末位加1(符号位不变)
- 移码:补码的符号位按位取反
数值1 | 数值-1 | 1-1 | |
---|---|---|---|
原码 | 0000 0001 | 1000 0001 | 1000 0010 |
反码 | 0000 0001 | 1111 1110 | 1111 1111 |
补码 | 0000 0001 | 1111 1111 | 0000 0000 |
移码 | 1000 0001 | 0111 1111 | 1000 0000 |
注:最高位0代表正数,最高位1代表负数,不足8位,补足8位
公式:
码制 | 定点整数 | 定点小数 | 数码个数 |
---|---|---|---|
原码 | -(2n-1-1)~+(2n-1-1) | -(1-2-(n-1))~+(1-2-(n-1)) | 2n-1 |
反码 | -(2n-1-1)~+(2n-1-1) | -(1-2-(n-1))~+(1-2-(n-1)) | 2n-1 |
补码 | -2n-1~+(2n-1-1) | -1~+(1-2-(n-1)) | 2n |
移码 | -2n-1~+(2n-1-1) | -1~+(1-2-(n-1)) | 2n |
定点整数
当n=8,也就是一共8个位数时:
原码:
-(2n-1-1)~+(2n-1-1)
-127~+127
转为二进制:
1111 1111 ~ 0111 1111
补码:
1000 0000 ~ 0111 1111
其中-128的补码为1000 0000是人为规定
定点小数
当n=8,也就是一共8个位数时:
原码:
-(1-2-(n-1))~+(1-2-(n-1))
即:-0.1111 111 ~ +0.111 1111
补码:
-1~+0.1111111
其中-1的补码为1000 0000是人为规定
例题:
1、采用n位补码(包含一个符号位)表示数据,可以直接表示数值(D)
A、2n
B、-2n
C、2n-1
D、-2n-1
2、如果 “2X”的补码是“90H”,那么X的真值是(B)
A、72
B、-56
C、56
D、111
考点3:浮点数的表示
浮点数的表示:
N = 尾数*基数指数
运算过程:
对阶>尾数计算>结果格式化
特点:
- 一般尾数用补码,阶码用移码
- 阶码的位数决定数的表示范围,位数越多范围越大
- 尾数的位数决定数的有效精度,位数越多精度越高
- 对阶时,小数向大数看齐
- 对阶是通过较小数的尾数右移实现的
例题:
1、1.25×106+1.255×1010=?
第一步:小数向大数看齐,把1.25×106转换成0.000125×1010
第二步:相加,0.000125×1010+1.255×1010
第三步:得1.25125×1010
2、浮点数能够表示数的范围是由其(B)的位数决定的。
A、尾数
B、阶码
C、数符
D、阶符
解析:尾数->有效精度 阶码->表示范围 数符->尾数部分的符号位 阶符->阶码的符号位
3、以下关于两个浮点数相加运算的叙述中,正确的是(B)
A、首先进行对阶,阶码大的向阶码小的对齐
B、首先进行对阶,阶码小的向阶码大的对齐
C、不需要对阶,直接将尾数相加
D、不需要对阶,直接将阶码相加
4、设16位浮点数,其中阶符1位,阶码值6位,数符1位,尾数8位。若阶码用移码表示,尾数用补码表示,则该浮点数所能表示的数值范围是(B)
A、-264~(1-2-8)264
B、-263~(1-2-8)263
C、-(1-2-8)264~(1-2-8)264
D、-(1-2-8)263~(1-2-8)263
考点4:逻辑运算
关系运算符及其优先次序
优先级相同(高)
< (小于)
<= (小于或等于)
> (大于)
>= (大于或等于)
优先级相同(低)
== (等于)
!= (不等于)
- 关系运算符的优先级低于算数运算符
- 关系运算符的优先级高于赋值运算符
逻辑运算符
逻辑变量之间的运算称为逻辑运算。二进制数1和0在逻辑上可以代表“真”与“假”。
逻辑或(||、+、U、V、OR):连接的两个逻辑值全0时才取0
逻辑与(&&、*、·、∩、Λ、AND):连接的两个逻辑值全1时才取1
逻辑异或(XOR、⊕):连接的两个逻辑值不相同时才取1,相同则取0
逻辑非(!、~、NOT、-、¬):将原逻辑值取反即可
真值表:描述一个逻辑表达式与其变量之间的关系
A | B | !A | A+B | A*B | A⊕B |
---|---|---|---|---|---|
0 | 0 | 1 | 0 | 0 | 0 |
0 | 1 | 1 | 1 | 0 | 1 |
1 | 0 | 0 | 1 | 0 | 1 |
1 | 1 | 0 | 1 | 1 | 0 |
短路原则
在逻辑表达式的求解中,并不是所有的逻辑运算符都要被执行。
(1)、a&&b&&c 只有a为真时,才需要判断b的值,只有a和b都为真时,才需要判断c的值
(2)、a||b||c 只要a为真,就不必判断b和c的值,只有a为假,才判断b。a和b都为假才判断c
例题:
1、(m=a>b)&&(n=c>d)
当a=1,b=2,c=3,d=4,m和n的原值为1时,由于“a>b”的值为0,因此m=0,而n=c>d不被执行,因此n的值不是0而仍保持原值1。
2、要判断字长为16位的整数a的低四位是否全为0,则(A)。
A、将a与0x000F进行“逻辑与”运算,然后判断运算结果是否等于0
B、将a与0x000F进行“逻辑或”运算,然后判断运算结果是否等于F
C、将a与0x000F进行“逻辑异或”运算,然后判断运算结果是否等于0
D、将a与0x000F进行“逻辑与”运算,然后判断运算结果是否等于F
3、对布尔表达式进行短路求值是指:无须对表达式中所有操作数或运算符进行计算就可确定表达式的值。对于表达式“a or ((c<d)and b)”,(B)时可进行短路计算。
A、d为true
B、a为true
C、b为true
D、c为true