c++ primer (第五版)第二章习题答案
2.3
计算机中的符号数有三种表示方法,即原码、反码和补码。符号位都是用0表示“正”,用1表示“负”,
1.原码:例如对于8位表示数+11,即为:00001011,-11为:10001011;
2.反码:符号位不变,其他位取反:-11的反码为:11110100;
3.补码:正整数的补码是其二进制表示,与原码相同。求负整数的补码,将其原码除符号位外的所有位取反(0变1,1变0,符号位为1不变)后加1。
1、对一个整数的补码再求补码,等于该整数自身。
2、将负数转换为无符号类型对应为将负数的原码转换为补码,int 类型为32位,即:
unsigned u = -42:输出值为: 11111111 11111111 11111111 11010110 =4294967254
3、上述也等价于这个负数-42加上无符号数的模, 对于int类型的无符号数(32位), 其模为:
11111111 11111111 11111111 11111111 = 4294967296, 取值为0-4294967296.
4,
2.4
结果分别为:
- 同类型= 32;
- unsigned -32 输出为:4294967264;
- 同类型:32
- -32
- 类型转换:正整数10转换为无符号类型10:结果:0
6.转换为无符号类型,= 0