3245阅读 5评论2011-09-20 ws00871112
分类:LINUX
什么平台下?
你的理解有问题,我来告诉你原因:<br /> 1. 宽度控制是肯定起作用的。但是宽度控制是针对不足这个宽度会补齐,如果超过这个宽度,还是按照原始值打印;<br /> 2. 由第一点说明,你应该知道你使用char时,对于printf来说其值为0xFFFFFFFF。原因是%x要求的是无符号整形变量,你传入的是char型,这里有一个整数提升的问题。char作为有符号数,提升到无符号整数,由于char的值为0xFF,那么提升时,前面的填充位为1。所以提升后其值为0xFFFFFFFF。<br /> 3. 你使用unint8_t时,是无符号提升,前面的填充为0,所以提升后的值为0xFF。<br /> <br /> 希望你仔细的研究后,再给出结论。对于C库来说,基本上不会有你可以发现的错误。最可能出问题的是你自己的代码。这样很容易误导别人。<br /> <br /> 最后如果想了解整数提升的问题,可以看我以前的文章<a href="http://blog.chinaunix.net/space.php?uid=23629988&do=blog&id=292647" ta
<div class="quote"><span class="q"><b>GFree_Wind</b>: 你的理解有问题,我来告诉你原因:<br /> 1. 宽度控制是肯定起作用的。但是宽度控制是针对不足这个宽度会补齐,如果超过这个宽度,还是按照原始值打印;<br /> 2. 由第一点说.....</span></div>非常感谢你的帮助。其实以前在《深入理解计算机系统》里也看到过改变整形值大小和类型的东西。在这儿只想着尝试用uint8_t来解决,并没有深入地去思考过这个问题。Wind兄给的建议不错,这是学习态度的问题,接受批评,呵呵!
<div class="quote"><span class="q"><b>billgate83</b>: 什么平台下?.....</span></div>UBUNTU 11.04
<div class="quote"><span class="q"><b>ws00871112</b>: 非常感谢你的帮助。其实以前在《深入理解计算机系统》里也看到过改变整形值大小和类型的东西。在这儿只想着尝试用uint8_t来解决,并没有深入地去思考过这个问题.....</span></div>虚心使人进步。<br /> <br /> 对于奇怪的问题,一定要先想是自己代码的问题。