基础补充

想完全掌握C语言的 printf() 函数,你就得明白C语言中的基本类型及其所占字节数。

位、字节、字的概念大家自己百度了解。下面我只给其关系:

8位 = 1字节

2字节 = 1字

代码示例

作为一个刚入门的小白,我们玩的数据都是十分小的,一般不会超过 4个字节(4294967296),所以,我们用什么格式化打印都不会出错。

案例一:小数据,大打印

我们现在选择一个不超过 4个字节 的数据,例如:9999。

十进制表示:9999

十六进制表示:0X270F

二进制表示:10 0111 0000 1111

因为 9999 不超过4个字节,所以,你可以用 int 装,或 long 装,甚至可以用 short 装。

C语言中常用的整数有 short、int 和 long 三种类型,通过 printf 函数,可以将它们以八进制、十进制和十六进制的形式输出。上节我们讲解了如何以十进制的形式输出,这节我们重点讲解如何以八进制和十六进制的形式输出,下表列出了不同类型的整数、以不同进制的形式输出时对应的格式控制符:二进制数、八进制数和十六进制数的输出

以 int 存数据,以 int输出数据

可以看到是完美的输出。可想而知,我们以 long 的方式(%lx)也是照样能丝毫误差的打印。

案例二:大数据,小打印

十进制数据:9999999999

十六进制数据:2 540B E3FF

二进制数据:10 0101 0100 0000 1011 1110 0011 1111 1111

大家很明显的能看到,这个数据是 5个字节,你用 int 存储就会报错。所以,我们得用 long long 来存取。因为 long 根据不同操作系统会变化,4或8不固定。

以 long long存取数据,以 int 打印数据:

编译的时候会报警告,大家不必理会,因为我们现在要验证一个伟大的知识。

编译通过之后,大家运行一下,看看它到底打印什么东西。

可以看到,打印的是 540be3ff,我们把它和我们的原始数据对比一下:

原数据:    2 540B E3FF

输出数据:   540b  e3ff

通过对比,我们可以很明显的感受到,数据被截断了,而且还是按照 int 字节大小截断的。现在明白了 大数据 小打印 的错误了吧。我们来看看正确的打印结果:

总结

所以,大家在进行C语言数据 printf 的时候,发现数据不对劲了,你就得想想是不是打印数据类型选择有问题。

C语言printf打印的奥秘相关推荐

  1. linux u8 u16 u32 u64,C 语言printf打印各种数据类型的方法(u8/s8/u16/s16.../u64/doub

    C 语言printf打印各种数据类型的方法(u8/s8/u16/s16.../u64/doub C 语言printf打印各种数据类型的方法(u8/s8/u16/s16.../u64/double/fl ...

  2. c语言 u16 printf,C 语言printf打印各种数据类型的方法(u8/s8/u16/s16.../u64/double/float)(全)...

    u16 首先必须知道u8,s8等数据类型的定义: typedef signed char s8; typedef unsigned char u8; typedef signed short s16; ...

  3. c语言printf打印字符串,puts()vs printf()用于以C语言打印字符串

    函数puts()和printf()在stdio.h头文件中声明,用于将文本发送到输出流.两者都有不同的用法和语法. puts() 该函数puts()用于在输出流上打印带有附加换行符'\ n'的字符串. ...

  4. c语言printf打印浮点型,printf以%d输出浮点数

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 曾看到printf的一道题,挺有意思,记录一下. float value = 1.0; printf('value_int = %dn', value); ...

  5. C语言-printf打印的用法

    printf函数的一般格式为: printf(格式控制,输出表列) 例如: printf("%d,%c\n",i,c) 括号内包含两部分: "格式控制"是用双撇 ...

  6. c语言 printf打印字符串

    格式输出 %s直接打印 %-5.3s :小数点前数字表示对齐数,±表示左右对齐,小数点后数字表示打印几位 #include<iostream> using namespace std;in ...

  7. C语言-printf打印%*s、%.*s与%-.*s的区别

    一.简介 在平时的使用中,会经常使用到printf进行打印,而最长使用的方式是printf("%s",string)进行打印.但是有个问题,如果string结尾不是0.那么prin ...

  8. C语言printf 打印十六进制数字0x01

    串口打印调试信息,有一段为输出十六进制地址的打印,%x输出显示为:0x1,而不是0x01,因此找到解决的方式如下:改为:%02x即可. 代码段如: printf("\r\n 本机的标准ID号 ...

  9. C 语言printf打印各种数据类型的方法(u8/s8/u16/s16.../u64/double/float)(全)

    首先必须知道u8,s8等数据类型的定义: typedef signed char s8; typedef unsigned char u8; typedef signed short s16; typ ...

最新文章

  1. JavaEE 要懂的小事:一、图解Http协议
  2. 2022年跨境电商的风口还在吗?
  3. lucene索引MySQL原因_我如何在数据库中存储Lucene索引?
  4. HTML5科普知识:细数HTML5新增标签
  5. PHP+jQuery+MySql实现红蓝投票功能
  6. micropython flask_在Python的Flask框架中实现单元测试的教程
  7. Report Style
  8. 捷联惯导系统(SINS)机械编排
  9. [项目管理]-第三章:需求分析
  10. 基于深度学习的图像匹配技术一览
  11. 基于微信小程序+JavaWeb+SSM开发的图书借阅小程序
  12. 5G SCMA MPA算法
  13. Jackson简单用法
  14. 【Hack The Box】windows练习-- Object
  15. lvgl roller(滑动列表控件)
  16. arcmap中的几个实用插件----加载互联网地图影像
  17. 长虹电视+刷回android,【当贝市场】长虹电视刷机方法,如何刷机
  18. 听普罗科菲耶夫的二部小提琴协奏曲
  19. 哈罗单车、美团单车、和滴滴青桔的新三国杀
  20. 科技译文mysql数据库_中国科技翻译杂志

热门文章

  1. Windows10系统升级1903后护眼模式无效
  2. 1-day(HTML标签)
  3. linux系统下批量解压方法汇总
  4. 玩转 ESP32 + Arduino (八) U8G2驱动OLED
  5. pycharm中basemap的安装
  6. 多线程学习一之基础知识
  7. kafka_2.11-2.4.1集群安装
  8. 如何让APP不在设置中的应用列表中显示(MTK6757 Android9.0 )
  9. 利用Python实现整数序列求和
  10. 声粗糙度matlab,[转载]如何编写求图像的粗糙度的Matlab程序?