博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
实验2-2 长度修饰符l和修饰符h的使用
阅读量:4145 次
发布时间:2019-05-25

本文共 1424 字,大约阅读时间需要 4 分钟。

 实验目的:

用printf函数正确输出整型变量的值时需要使用与变量类型相适应的格式字符串,如有符号数用%d、无符号数用%u,此外还需根据变量所标识存储单元的长度选用适当的修饰符。一般而言,short型用长度修饰符h,long型用长度修饰符l,int型不加。如果不匹配时会出现什么情况呢?这是本次实验需要解决的问题之一。长度修饰符对scanf函数有何影响是本次实验需要解决的另一个问题。

实验步骤:

1.分析下面程序的输出

#include <stdio.h>

void main()

{    

       long i, j, k;

       i = 0x80000001;

       j = 0x80008001;

       k = 0x00008001;

       printf("%ld,%ld,%ld\n", i, j, k);  

       printf("%hd,%hd,%hd\n", i, j, k);

}

long型变量

i

j

k

初始值为

0x80000001

0x80008001

0x00008001

存储状态为

 

 

 

以%ld格式预期的输出为

 

 

 

以%hd格式预期的输出为

 

 

 

以%ld格式实际的输出为

 

 

 

以%hd格式实际的输出为

 

 

 

分析:

由输出可知,用printf函数以%hd格式输出长度为4个字节的long型变量时,只有位于         的数据被解码,由于其它位数据的丢失,输出值与原值通常不同。

由此例可再次证明,输出数据时printf函数的输出仅与     有关。

2.填表并编程验证

short型变量

i

j

k

初始值为

0x0001

0x8001

0xffff

存储状态为

 

 

 

以%hd格式预期的输出为

 

 

 

以%ld格式预期的输出为

 

 

 

以%hd格式实际的输出为

 

 

 

以%ld格式实际的输出为

 

 

 

分析:

以%ld格式输出长度为2个字节的short型变量时,printf函数“会”扩充数据,解码的数据将由2个字节变为4个字节。由实际的输出值(以%ld格式)与原值(以%hd格式)通常(相同/不同)可知,数据扩充的规律为                  

提示:

数据扩充的规律可参考练习2.6总结。

//长度修饰符对scanf函数有何影响?

3.填表并分析

long型变量

i

j

k

以%hx格式时输入

0x80000001

0x80008001

0x00008001

预期的存储状态为

 

 

 

实际的存储状态为

 

 

 

#include <stdio.h>

void main()

{    

       long i, j, k;

       printf("%lx,%lx,%lx\n", i, j, k);

       scanf("%hx%hx%hx", &i, &j, &k);

       printf("%lx,%lx,%lx\n", i, j, k);

       printf("%ld,%ld,%ld\n", i, j, k);  

       printf("%hd,%hd,%hd\n", i, j, k);

}

分析:

由第一条printf函数的输出可知,整型变量没有被赋值之前,VC6.0会将它们的存储状态预设为     。注意:VC6.0这样做只是为了方便观测数据,通常应认为没有被赋值的变量的值是随机的。

由第二条printf函数的输出可知,用scanf函数以%hd格式为长度为4个字节的long型变量输入数据时,只有位于         的数据被处理。

 

4.设计表格并编程验证,,用scanf函数以%ld格式为长度为2个字节的short型变量输入数据时会出现什么情况。

转载地址:http://sbdti.baihongyu.com/

你可能感兴趣的文章
PicPick (图像捕捉/截图/处理)
查看>>
ExcellenceSoft Hot Key (热键设置)
查看>>
DOS批处理编程的异类——时钟(Clock)
查看>>
DOS(bat) 字符串替换原理
查看>>
DOS:求一个能取当前执行的bat文件所在目录方法。
查看>>
Java 时区问题
查看>>
推荐一个IE下的优秀js调试工具(Companion.JS)
查看>>
为 浏览器手动安装 JRE Applet
查看>>
flash xmlsocket policy 问题
查看>>
Flash纯脚本生成饼图
查看>>
CSS 进度条(含进度)
查看>>
ActionScript ExternalInterface.call 参数有字符串 "/" 的解决方案
查看>>
JavaScript 与 ActionScript 3.0 交互的一些问题
查看>>
Quartz的cron表达式
查看>>
在 表格中 用 css 设置 cellpadding 和 cellspacing 属性
查看>>
SimplePlayer例程中报告与wsprintfWInternal有关的错误
查看>>
DOS:先进入 bat 文件的路径,然后执行 bat 文件,然后回到当前目录
查看>>
dom4j 的 DTD 验证,以及输出乱码问题解决方案
查看>>
SVN for Eclipse plugins 中文转英文 (新方法)
查看>>
Angular.JS + Require.JS + angular-async-loader 来实现异步加载 angular 模块
查看>>