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

1、不一样输出格式会有不一样的结果git

1.%ld   用于long类型的值,若是系统中int和long大小相同,使用%d就能够,这样的程序被移植到其余系统(int和long类型的大小不一样)。github

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这个​数字在系统内部存储的方式是同样,只不过咱们使用了不一样的打印方式,因此获得了不一样的结果。在待打印的值大于​有符号值的最大值的时候会出现这种状况。ui

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

由于int类型被认为是计算机处理整数类型最高效的类型。.net

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

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

​插曲:

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

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

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

 

 

而后建立一个空项目以后,而后右键点击“源文件”,选择C++项目,(咱们这里能够手动改为C项目,就是​后缀名直接改为.c既可),而后编辑代码,咱们先要点击生成(build)-生成解决方案(build solution)以后,而后在点击直接运行就能够正常运行了,若是咱们不先点击​生成解决方法,就会报错。​

3、源码:

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大数据学习视频礼包

 

相关文章
相关标签/搜索