c语音打印的一些基础知识

本文探讨了在使用loff_t类型数据时遇到的问题,特别是当使用%x作为printf的输出格式时导致的数据截断和后续输出错误。文章详细解释了loff_t的实际定义,并提供了正确的打印方法。

今天在参数打印的时候,遇到了一点小问题,打印值和函数参数的传递值不一致。既然遇到问题了,那就静下心来好好的来解决问题,不管问题的大小。

问题来源:
函数参数类型 loff_t,打印时printf输出格式%x,结果不仅参数值打印错误,而且同一printf后面的值也全部打印错误。

解决:
首先这个loff_t到底是个什么数据类型要搞清楚,不断跟踪,它的最终定义为long long,这样问题的根源找到了。下面列出一些打印的常识:

1、各数据类型所占字节

32位系统下,int、long、long long所占字节数和取值范围
字节数
char: 1字节(8位)
int: 4字节 (32位,取值范围 -2^31 ~ 2^31-1)
unsigned int : 4字节 (32位,取值范围 0 ~ 2^32-1)
long: 4字节 (32位,取值范围 -2^31 ~ 2^31-1)
unsigned long : 4字节 (32位,取值范围 0 ~ 2^32-1)
long long : 8字节(64位,取值范围 -2^63 ~ 2^63-1)
取值范围
int : -2147483648 ~ 2147483647
unsigned int : 0 ~ 4294967295
long : -2147483648 ~ 2147483647
unsigned long : 0 ~ 4294967295
long long : -9223372036854775808 ~ 9223372036854775807
unsigned long long : 0 ~ 1844674407370955161

2、printf输出格式化

在printf中%d用于int或者比int小的整数类型。比int小的类型被转型成int。
%ld用于long类型,%lld用于long long类型。
%x标识的数会被当成int进行读取,所以long long类型的数如果超过int的范围会被截断,得不到正确的结果。而且因为它多占了4个字节,还会影响后面的其它标识符的输出。
另外%f标识的数会被当成double读取,即取出8个字节读取。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值