C语言printf打印的奥秘

基础补充

想完全掌握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 的时候,发现数据不对劲了,你就得想想是不是打印数据类型选择有问题。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

super码王

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值