您的位置:首页 > 其它

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

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

问题来源:

函数参数类型 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个字节读取。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: