练习二
2.1用计算机处理信息时为什么需要对信息进行数字化编码?
答:
现代计算机采用二进制形式表示数据和指令,计算机内部处理的所有数据都是经过数字化编码的二进制数据,数值、文字、图形等信息只有编码成二进制形式才能由计算机进行处理。
2.2编码数值型数据时需考虑哪三个方面的问题?
答:
1. 编码的长度
2. 正负号的编码
3. 小数点的编码
2.3 求码长1个字节的原码、反码和补码形式的定点整数分别能编码整数的范围与个数。
答:
原码:1111 1111 - 0111 1111 -127~127共255数
反码:1000 0000 – 0111 1111 -127~127共255数
补码: 1000 0000 – 0111 1111 -128~127共256数
2.4求下列数的补码(码长1个字节)。
65 -1 123 -123 -128
答:
65:0100 0001
-1:原码1000 0001反码1111 1110补码1111 1111
123:0111 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
答:
65:0000 0000 0100 0001
-1:原码1000 0000 0000 0001
反码1111 1111 1111 1110
补码1111 1111 1111 1111
123:0000 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
65:0000 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
123:0000 0000 0000 0000 0000 0000 0111 1011
-123:原码1000 0000 0000 0000 0000 0000 0111 1011
反码1111 1111 1111 1111 1111 1111 1000 0100
补码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
void main( )
{
short i = 32767, j = -32768;
printf("%hd+1=%hd\n", i, i+1);
printf("%hd-1=%hd\n", j, j-1);
}
当变量i和j的值为127和-128时,程序的运行结果又怎样?
答:
输出结果为:
32767+1=-32768
-32768-1=32767
当变量i和j的值为127和-128时,程序的运行结果为:
127+1=128
-128-1=-129
因为short型变量的取值范围为-32768到32767,所以值128和-129不会溢出。
2.8升序排列下面的整型字面量。
0xac 169 0253
0xac的值为172,0253的值为171。
升序排列为