P 24
题目:十进制与十六进制之间的转换
代码:
解释过程:直接将十进制转换成十六进制,因为printf没有使用任何类型信息,所以可以直接用指示符进行打印。
代码运行:
P28
题目:使用强制类型转换累访问和打印不同程序对象的字节表示,以十六进制的格式输出
代码:
解释结果:a:“%.2x”表明整数必须用至少两个数的十六进制格式输出。
b: 我将int型提前输入1,float型输入1.1,指针输入p,进行结果运算。
c: typedf是命名数据类型的,其中包括:常规变量类型、数组类型、指针、函数地址、函数声明等。
d: 因为指针每次访问地址不同,所以每次打印结果也不一样。
e:linux 是小端法输出,所以是从低位到高位的输出。
f:int型有4字节,每字节有8位,所以换成二进制有32位,既换成十六进制为8位。
代码运行:
P 30
题目:输入同一个数,以int、float、指针型输入,其打印结果不同
代码:
解释结果:因为一个整数在计算机中以int、float型的储存方式不同,所以输出结果不同。
这两个格式使用不同的编码方法,进行适当的移位后,会有13个相匹配的位序列。
运行结果:
P 43
题目:有符号数的其他表示方法。提前输入12345,然后转换成-12345,最后进行打印。
代码:
解释结果:a: short型是2字节,每字节8位,换成二进制是16位,最后换成十六机制是4位。
b: 有符号整数在C语言中以补码的方式进行表示。
结果运行:
P 44
题目:有符号数和无符号数之间的转换
代码:
解释结果:a:强制转换类型的结果保持位值不变,只是改变了解释这些位的方式。
b: 其中运用了函数转换。
运行:
P 47
题目:运用U2B函数进行无符号数和有符号数之间的转换。
代码:
解释结果:a: 要创建一个无符号常量,必须加上后缀字符‘u’。
b:若x<2的w-1次幂,则输出原值。
若大于等于,则输出原值减去2的w次幂。
运行结果:
P 49
题目:扩展一个数字的位,将short型扩展成int型。
代码:
解释结果:a:符号扩展,将有符号数的补码数字转换成一个更大的数据类型进行符号扩展。
在表示中添加最高有效位的值的副本。
b: 零扩展,无符号数只需要在开头添加0.
运行结果:
P 50
题目:转换的相对顺序影响程序的行为
代码:
解释结果:先从short转换成unsigned,改变了大小,后才完成有符号和无符号之间的转换。
运行结果:
P 51
题目:斩断数字的位
代码
结果:斩断最高位的值。
运行:
P 78
题目:int、float、double型之间的转换。
代码:
解释结果:a:将int型转换成float、double型,数字不会溢出,但可能被舍入。
因为double有更大的范围,能够暴力精确的数值。
b:从double到float,范围小,可能会溢出位正无穷或负无穷。
由于精度较小,所以还可能被舍入。
C:一个浮点数到整数的转换,如果不能为其找到一个合理的值,就会产生负值。
运行结果: