首页 > 技术文章 > 20135218 姬梦馨 第二章代码

ShadowStealer 2015-10-18 19:51 原文

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:一个浮点数到整数的转换,如果不能为其找到一个合理的值,就会产生负值。

运行结果:

 

推荐阅读