C连载8-Printf中格数输出的不同样式以及原理分析

一、不同输出格式会有不同的结果
1.%ld 用于long类型的值,如果系统中int和long大小相同,使用%d就可以,这样的程序被移植到其他系统(int和long类型的大小不同)。
2.同样x和o前面也可以使用l来修饰。
3.对于short类型,前面就是使用h来当前缀。
4.h和l前缀都可以和u一起连用,用于表示无符号的类型。例如:%lu

/*print2.c  --更多printf()的特性*/
#include<stdio.h>
int main(void) {
  unsigned int un = 300000000;/*int为32位和short为16位的系统*/
  short end = 200;
  long big = 65537;
  long long verybig = 1234567890642;

  printf("un= %u and not %d \n", un, un);
  printf("end = %hd and %d \n", end, end);
  printf("big = %ld and not %hd", big, big);
  printf("verybig = %lld and not %ld \n", verybig, verybig);

  return 0;
}

8.1
分析:
(1)从上面生成的数据来看,第一行中是因为30000000这个数字在系统内部存储的方式是一样,只不过我们使用了不同的打印方式,所以得到了不同的结果。在待打印的值大于有符号值的最大值的时候会出现这种情况。
(2)第二行,中的疑问,C编译器会把short类型自动转换成int类型的值,为什么呢?
因为int类型被认为是计算机处理整数类型最高效的类型。
(3)那么这里的h修饰符又有什么作用呢?
使用h修饰可以显示较大整数被截断成short类型值的情况,例如:65537以二进制的形式表示为000000000000010000000000001,使用%hd只会查看后面16位的情况;
插曲:
今天晚上装上了Visual studio 2019,但是写了一个小程序,就是编译报错
报错:找不到…exe文件,经过多方求证,搞了半天才搞对。
我们新建一个“空项目”(不是其他的选项哦!!)
8.2

然后创建一个空项目之后,然后右键点击“源文件”,选择C++项目,(我们这里可以手动改成C项目,就是后缀名直接改成.c既可),然后编辑代码,我们先要点击生成(build)-生成解决方案(build solution)之后,然后在点击直接运行就可以正常运行了,如果我们不先点击生成解决方法,就会报错。
三、源码:
D8_1_print.c
https://github.com/ruigege66/CPrimerPlus/blob/master/D8_1_print.c
D7_toobig.c
https://github.com/ruigege66/CPrimerPlus/blob/master/D7_toobig.c
2.CSDN:https://blog.csdn.net/weixin_44630050
3.博客园:https://www.cnblogs.com/ruigege0000/
4.欢迎关注微信公众号:傅里叶变换,个人账号,仅用于技术交流,后台回复“礼包”获取Java大数据学习视频礼包
8.3

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值