您好,欢迎访问三七文档
实验四类型转换和移位操作运算(第3章)实验目的:了解高级语言中数据类型的转换和移位操作结果,从而能更好地理解指令系统设计和计算机硬件设计所需满足的要求和需要考虑的问题。实验要求:,编程实现以下各种操作:(1)给定一个short型数据-12345,分别转换为int、unsignedshort、unsignedint、float类型的数据;(2)给定一个int型数据2147483647,分别转换为short、unsignedshort、unsignedint、float类型的数据;(3)给定一个float型数据123456.789e5,转换成double型数据;(4)给定一个double型数据123456.789e5,转换成float型数据;(5)按short和unsignedshort类型分别对-12345进行左移2位和右移2位操作。要求分别用十进制和十六进制形式打印输出以上各种操作的结果。实验报告:1.给出源程序(文本文件)和执行结果。1):#includestdio.hintmain(){shorta=-12345;intb=a;unsignedintc=a;unsignedshortd=a;floate=a;printf(int=%d\n,b);printf(unsignedint=%d\n,c);printf(unsignedshort=%d\n,d);printf(float=%f\n,e);printf(int=%x\n,b);printf(unsignedint=%x\n,c);printf(unsignedshort=%x\n,d);printf(float=%x\n,e);return0;}2):#includestdio.hintmain(){inta=2147483647;shortb=a;unsignedc=a;unsignedshortd=a;floate=a;printf(short=%d\n,b);printf(unsigned=%d\n,c);printf(unsignedshort=%d\n,d);printf(float=%f\n,e);printf(short=%x\n,b);printf(unsigned=%x\n,c);printf(unsignedshort=%x\n,d);printf(float=%x\n,e);return0;}3):#includestdio.hintmain(){floata=123456.789e5;doubleb=a;printf(double=%d\n,b);printf(double=%x\n,b);return0;}4):#includestdio.hintmain(){doublea=123456.789e5;floatb=a;printf(float=%f\n,b);printf(float=%xf\n,b);return0;}2.根据实验结果,回答下列问题。(1)无符号数和带符号整数的扩展操作方式是否相同?各是如何进行的?答:不同。无符号数,高位补0;有符号数,高位补符号位。(2)补码整数(如int型数)是否总能转换为等值的float类型数据?为什么?答:不能。因为int型数据有效位数为32位,而float型数据的尾数部分是23位,加上隐藏的高位1位,实际精度为24位,所以int精度比float高,所以int型数据向float型数据转换时有效位数可能会丢失。(3)float型数据是否总能转换成等值的double型数据?为什么?答:能。double型数据的精度和范围均高于float型,所以float型向double型转换时是中等值。(4)长数被截断成短数后可能发生什么现象?为什么?答:可能发生因为溢出而改变原数据的值的情况。因为长数的表示范围总是大于短数的表示范围,所以当一个长数足够大到短数无法表示的程度,则截断是就会发生溢出。(5)C语言中移位操作规则与操作对象的数据类型有关吗?答:有关。有符号数执行算数移位,无符号数执行逻辑移位。(6)左移2位和右移2位操作分别相当于扩大和缩小几倍?答:分别相当于扩大4倍和缩小4倍.
本文标题:实验四
链接地址:https://www.777doc.com/doc-7986897 .html