以下程序
short b =-10;
printf("%x %d",b,sizeof(b));
Run Code Online (Sandbox Code Playgroud)
输出(与vs 2008)
FFFFFFF6 2
Run Code Online (Sandbox Code Playgroud)
为什么不
FFF6 2
Run Code Online (Sandbox Code Playgroud)
签名字符也一样.
这是由于整数类型促销.
你的短裤被隐含地提升为int.(这里是32位)所以这些是在这种情况下的符号扩展促销.
因此,printf()打印出完整32位int的十六进制数字.
当您的短值为负时,符号扩展将使用1填充前16位,因此您获得fffffff6而不是fff6.
格式字符串中的占位符%x将相应的参数解释为unsigned int.
要将参数打印为short,请将长度修饰符h添加到占位符:
printf("%hx", hex);
Run Code Online (Sandbox Code Playgroud)
这里h表示转换将是dioux X或n之一,下一个指针是指向short int或unsigned short int(而不是int)的指针.
codepad链接:http://codepad.org/aX2MzY0o
请参阅:http://en.wikipedia.org/wiki/Printf_format_string#Format_placeholders
| 归档时间: |
|
| 查看次数: |
198 次 |
| 最近记录: |