写在前面:
本系列文章用于记录本人软考学习历程,适用于零基础人群,每天不定期更新,如果读者哪里不理解或者发现哪里理解的有问题,欢迎评论,一起进步学习,祝大家都能顺利通过考试~
第三节 数据表示
本节主要是考察进制转换,也就是计算能力,需要熟记各个进制之间的转换关系,一定要多做题!!!
一般出题都是会给你一个十进制数,让你求原码、反码、补码、移码。
- 什么是机器数?
各种数值在计算机中表示的形式就是机器数,其特点就是采用二进制计数制,数的符号用0和1表示,小数点则隐含,表示不占位置。机器数对应的实际数值称为数的真值。
机器数有无符号数和带符号数之分。无符号数表示正数,在机器数中没有符号位。对于带符号数,机器数的最高位是表示正、负的符号位,其余位则表示数值。这里需要说明几个概念性的东西。
1.纯整数:小数点的位置在机器数的最低位之后。
2.纯小数:小数点的位置在机器数的最高位之前(符号位之后)。
为了方便运算,带符号的机器数可采用原码、反码、补码、移码等不同的编码方法,机器数的这些编码方法称为码制。
二进制转十进制的小技巧之1248规则:
假设我们有一个八位的二进制数1111 1111,那么他每一位其实代表的是一个十进制整数,请看如下分析:
0000 0001 代表的是1
0000 0010 代表的是2
0000 0100 代表的是4
0000 1000 代表的是8
以此类推下来,1111 1111 也就是 128+64+32+16+8+4+2+1 = 255,不明白可以留言或者多看几遍。
- 如何计算一个数的原码、反码、补码和移码?
1.原码的表示法。在给定机器字长n(也就是采用n个二进制位表示数据)的前提下,将X的原码记为[X]原。
这里需要分两种情况来讨论,即纯整数和纯小数。
若X是纯整数,则当X>=0时,值不变,仍为本来的数,直接转为二进制即可。当X<0时,为2的n-1次方再加上X的绝对值。
若X是纯小数,则当X>=0时,值不变。当X<0时,值为1加上X的绝对值。
例题1.1 若机器字长为8,分别写出一下数的原码+1,-1,+127,-127,+45,-45,+0.5,-0.5
[+1]原 = 0000 0001 [-1]原 = 1000 0001 (129也就是 2的7次方再加上-1的绝对值)
[+127]原 = 0111 1111 [-127]原 = 1111 1111 (255也就是 2的7次方再加上-127的绝对值)
[+45]原 = 0010 1101 [-45]原 = 1010 1101 (173也就是 2的7次方再加上-45的绝对值)
[+0.5]原 = 0@100 0000 [-0.5]原 = 1@100 0000 (@符号代表小数点)
[+0]原 = 0000 0000 [-0]原 = 1000 0000
2.反码的表示法。
若X是纯整数,则当X>=0时,值不变,仍为本来的数,直接转为二进制即可。当X<0时,为2的n次方减一再加上X。
若X是纯小数,则当X>=0时,值不变。当X<0时,值为2减去2的-(n-1)次方加上X。
[+1]反 = 0000 0001 [-1]反 = 1111 1110 (254也就是 256-2=254)
[+127]反 = 0111 1111 [-127]反 = 1000 0000 (128也就是 256-128=128)
[+45]反 = 0010 1101 [-45]反 = 1101 0010 (210也就是 256-46=210)
[+0.5]反 = 0@100 0000 [-0.5]反 = 1@011 1111 (@符号代表小数点 )
[+0]反 = 0000 0000 [-0]反 = 1111 1111
3.补码的表示法。
若X是纯整数,则当X>=0时,值不变,仍为本来的数,直接转为二进制即可。当X<0时,为2的n次方加上X。
若X是纯小数,则当X>=0时,值不变。当X<0时,值为2加上X。
[+1]补 = 0000 0001 [-1]补 = 1111 1111 (255也就是 256-1=255)
[+127]补 = 0111 1111 [-127]补 = 1000 0001 (129也就是 256-127=129)
[+45]补 = 0010 1101 [-45]补 = 1101 0011 (211也就是 256-45=211)
[+0.5]补 = 0@100 0000 [-0.5]补 = 1@100 0000 (@符号代表小数点 )
[+0]补 = 0000 0000 [-0]补 = 0000 0000
4.移码表示法。规定偏移量为2的n-1次方,这里字长为8,则偏移量为128。
若X是纯整数,则[X]移=128 + X,若X是纯小数,则[X]移=1+X。
[+1]移 = 1000 0001 [-1]移 = 0111 1111 (127也就是 128-1 =127)
[+127] 移 = 1111 1111 [-127]移 = 0000 0001 (1也就是 128-127 =1)
[+45]移 = 1010 1101 [-45]移 = 0101 0011 (83也就是 128-45 = 83)
[+0.5]移 = 1@100 0000 [-0.5]移 = 0@100 0000 (@符号代表小数点 )
[+0]移 = 1000 0000 [-0]移= 1000 0000
考题解析:
利用IEEE754标准将数176.0625表示为单精度浮点数。
第一步,将十进制转为二进制(机器数)
(176.0625)10 = (1011 0000.0001)2
对二进制数进行规格化处理: 10110000.0001 = 1.01100000001 X 2的7次方
这样就保证了b0为1,而且小数点在第一位,去掉b0,扩展为单精度浮点数所规定的23位位数
01100000001000000000000
然后求阶码,上述指数为7,单精度规定指数偏移量为127,7+127 = 134 E=134
因为是正数 S=0
所以 最终结果为0 10000110 01100000001000000000000