练习二
2.1用计算机处理信息时为什么需要对信息进行数字化编码?
答:
现代计算机采用二进制形式表示数据和指令,计算机内部处理的所有数据都是经过数字化编码的二进制数据,数值、文字、图形等信息只有编码成二进制形式才能由计算机进行处理。
2.2编码数值型数据时需考虑哪三个方面的问题?
答:
1. 编码的长度
2. 正负号的编码
3. 小数点的编码
2.3 求码长1个字节的原码、反码和补码形式的定点整数分别能编码整数的范围与个数。
答:
原码:1111 1111 - 0111 1111 -127~127255
反码:1000 0000 – 0111 1111 -127~127255
补码: 1000 0000 – 0111 1111 -128~127256
2.4求下列数的补码(码长1个字节)。
65  -1  123  -123  -128
答:
650100 0001
-1:原码1000 0001反码1111 1110补码1111 1111
1230111 1011
-123:原码1111 1011反码1000 0100补码1000 0101
-128:原码不能用1字节表示反码同样补码1000 0000
2.5从负数的反码加1得补码的过程说明补码的符号位可以看作是特殊的数值位的理由。(提示:以码长1个字节为例,用127减去负数原码的数值位就得到了负数的反码)
答:
-123为例
原码1111 1011反码1000 0100补码1000 0101
0111 1111    127
-1111 1011    -123
1000 0100      4    +1=5  1000 0101:-128+5=-123
2.6求码长分别为2个和4个字节时第4题中几个数的补码,并分析码长变化时补码是如何变化的。
65  -1  123  -123  -128
答:
650000 0000 0100 0001
-1:原码1000 0000 0000 0001
反码1111 1111 1111 1110
补码1111 1111 1111 1111
1230000 0000 0111 1011
-123:原码1000 0000 0111 1011
反码1111 1111 1000 0100
补码1111 1111 1000 0101
-128:原码1000 0000 1000 0000
反码1111 1111 0111 1111
补码1111 1111 1000 0000
650000 0000 0000 0000 0000 0000 0100 0001
-1:原码1000 0000 0000 0000 0000 0000 0000 0001
反码1111 1111 1111 1111 1111 1111 1111 1110
补码1111 1111 1111 1111 1111 1111 1111 1111
1230000 0000 0000 0000 0000 0000 0111 1011
-123:原码1000 0000 0000 0000 0000 0000 0111 1011
反码1111 1111 1111 1111 1111 1111 1000 0100
float几个字节多少位补码1111 1111 1111 1111 1111 1111 1000 0101
-128:原码1000 0000 0000 0000 0000 0000 1000 0000
反码1111 1111 1111 1111 1111 1111 0111 1111
补码1111 1111 1111 1111 1111 1111 1000 0000
变化规律为:正数前面补0,负数前面补1。
2.7用实例证明码长2个字节的补码形式整数的取值范围也构成一个环。分析下面程序的输出结果。
    答:
#include <stdio.h>
    void main( )
        {
              short i = 32767, j = -32768;