2.4 已知数的补码表示形式,求数的真值。
[x]补=0.10010, [x]补=1.10010, [x]补=1.11111, [x]补=1.00000, [x]补=0.10001, [x]补=1.00001,
解:
[x]补=0.10010,则[x]原=0.10010,x=0.10010; [x]补=1.10010,则[x]原=1.01101,x=-0.01101; [x]补=1.11111,则[x]原=1.00000,x=-0; [x]补=1.00000,则[x]原=1.11111,x=-0.11111; [x]补=0.10001,则[x]原=0.10001,x=0.10001; [x]补=1.00001,则[x]原=1.11110,x=-0.11110。
2.5 已知x=0.10110,y=—0.01010,求:
[x/2]补, [x/4]补, [y/2]补, [2y]补
解: [x]原=0.10110=[x]反=[x]补,
所以[x/2]补=0.010110,[x/4]补=0.0010110; [y]原=1.01010,[y]反=1.10101,[y]补=1.10110, 所以[y/2]补=1.110110,[2y]补=1.0110。
2.6 C语言中允许无符号数和有符号整数之间的转换, 下面是一段C语言代码: Int x =-1;
Unsigned u=2147483648;
Printf (“x=%u=%d\\n”,x,x); Printf (“u=%u=%d\\n”,u,u);
给出在32位计算机中上述程序段的输出结果并分析原因. 解:x=4294967295=-1;u=2147483648=-2147483648
原因:x是int型,在计算机中以补码形式存在。%u以无符号输出,%d输出真值,所以x=4294967295=-1。
u=231是一个无符号数,无溢出,由于首位为1 %u符号输出第一位为非符号位,所以是2147483648
%d 第一位为符号位,所以是负数,取反加1还是231所以是-2147483648。
2.7 分析下列几种情况下所能表示的数据范围分别是多少 1)16位无符号数;
2)16位原码定点小数; 3)16位补码定点小数; 4) 16位补码定点整数; 解:
1)16位无符号数:0 ~ 1111 1111 1111 1111,即0 ~ 216-1=65535
2)16位原码定点小数:1.111 1111 1111 1111 ~ 0.111 1111 1111 1111,即 (-1-2-15)~ 1-2-15 3)16位补码定点小数:1.000 0000 0000 0000 ~ 0.111 1111 1111 1111,即 -1 ~ 1-2-15 4) 16位补码定点整数:1000 0000 0000 0000 ~ 0111 1111 1111 1111,即 -215 ~ 215-1
2.8 用补码表示8位二进制整数,最高位用一位表示符号(即形如x0x1x2x3x4x5x6x7)时,模
应为多少?
解:因为8位二进制数补码的表示范围为:-128~127一共有256个数,所以模为256。
2.9 用IEEE754 32位浮点数标准表示十进制数
a)?65 b)3.1415927 c)64000
8解:
a) 首先分别将整数和分数部分转换成二进制数:
5?6=-110.101 8移动小数点,使其变成1.M的形式: -110.101=-1.10101*22 于是得到:
S=0, e = 2,E= 10+01111111 = 10000001,M = 10101 最后得到32位浮点数的二进制存储格式为:
1100 0000 1101 0100 0000 0000 0000 0000=(C0D40000)16
b) 首先分别将整数和分数部分转换成二进制数: 3.1415927=11.00100100001111110110101 移动小数点,使其变成1.M的形式
11.00100100001111110110101=1.100100100001111110110101×2 于是得到:
S=0, e = 1,E= 1+01111111 =10000000,M = 10010010000111111011010 最后得到32位浮点数的二进制存储格式为:
0100 0000 0100 1001 0000 1111 1101 1010=(40490FDA)16
c) 首先将6400转换成二进制数: 64000=1100100000000
移动小数点,使其变成1.M的形式 1100100000000=1.100100000000×212 于是得到:
S=0, e = 12,E= 1100+01111111 =10001011,M = 1001 最后得到32位浮点数的二进制存储格式为:
0100 0101 1100 1000 0000 0000 0000 0000=(45C80000) 16
2.10 求与IEEE754 32位浮点数43940000H对应的十进制数。 解:
43940000H=(0100 0011 1001 0100 0000 0000 0000 0000)2 S=0,E=(10000111)2-127=8,M=1.00101 所以表示数为100101000,对应的十进制数为296。
2.11 求32位 IEEE754 浮点数能表示的最大数和最小数。
解:用IEEE754格式(E的取值范围:1~254,留出全0和全1分别表示0和无穷大)
31 30 23 22 0 SE M (1) 最大数的二进制表示: