Honesty and diligence should be your eternal mates.
分类: LINUX
2011-09-20 20:11:21
GFree_Wind2011-09-22 15:17:35
ws008711122011-09-22 14:58:58
GFree_Wind2011-09-22 12:40:37
你的理解有问题,我来告诉你原因:
1. 宽度控制是肯定起作用的。但是宽度控制是针对不足这个宽度会补齐,如果超过这个宽度,还是按照原始值打印;
2. 由第一点说明,你应该知道你使用char时,对于printf来说其值为0xFFFFFFFF。原因是%x要求的是无符号整形变量,你传入的是char型,这里有一个整数提升的问题。char作为有符号数,提升到无符号整数,由于char的值为0xFF,那么提升时,前面的填充位为1。所以提升后其值为0xFFFFFFFF。
3. 你使用unint8_t时,是无符号提升,前面的填充为0,所以提升后的值为0xFF。
希望你仔细的研究后,再给出结论。对于C库来说,基本上不会有你可以发现的错误。最可能出问题的是你自己的代码。这样很容易误导别人。
最后如果想了解整数提升的问题,可以看我以前的文章