一、不同输出格式会有不同的结果

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;

}

​分析:

(1)从上面生成的数据来看,第一行中是因为30000000这个​数字在系统内部存储的方式是一样,只不过我们使用了不同的打印方式,所以得到了不同的结果。在待打印的值大于​有符号值的最大值的时候会出现这种情况。

(2)第二行,中的疑问,C编译器会把short类型自动转换成int类型的值,为什么呢?

因为int类型被认为是计算机处理整数类型最高效的类型。

(3)​那么这里的h修饰符又有什么作用呢?

使用h修饰可以显示较大整数被截断成short类型值的情况,例如​:65537以二进制的形式表示为000000000000010000000000001,使用%hd只会查看后面16位的情况​;

​插曲:

今天晚上装上了Visual studio 2019,但是写了一个小程序,就是编译报错

​报错:找不到​..........exe文件,经过多方求证,搞了半天才搞对。

我们新建一个“空项目”(不是其他的选项哦​!!)

 

 

然后创建一个空项目之后,然后右键点击“源文件”,选择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大数据学习视频礼包

 

posted on 2020-06-18 00:29  心悦君兮君不知-睿  阅读(281)  评论(0)    收藏  举报