c语言十六进制问题,求解答

第15题,谢谢

第1个回答  2013-03-20
%u为以无符号十进制输出。无符号整数能表示的数范围是0-65535,即对应的二进制数0-1111111111111111(16个1)。

而x=0xFFFF-->转换为二进制刚好是16个1,所以,输出65535
第2个回答  2013-03-20
假设有一个十六进数 2AF5
直接计算就是:
5 * 16^0 + F * 16^1 + A * 16^2 + 2 * 16^3 = 10997
也可以用竖式表示:
第0位: 5 * 16^0 = 5
第1位: F * 16^1 = 240
第2位: A * 16^2 = 2560
第3位: 2 * 16^3 = 8192本回答被网友采纳
第3个回答  2013-03-20
0xFFFF,无符号的话,就是65525,
%u是按整数输出,不考虑符号。
32767是有符号整数情况下的结果。=0x7FFF;追问

额,没看懂给~~~为什么有符号是32767呢?

追答

额,我的回答稍微有点错误。
这道题我从试卷上看,是以16位CPU为蓝本出的。16位机的整数范围为-32768 - 32767
最高位代表符号,最高位为1,表示负数,为0,表示正数。
0xFFFF,最高位是1,所以用int型表示,就是-32768
0x7FFF,最高位是0,所以用int型表示,就是32767
无符号数没有正负,最高位也参与计算,就是65535
------------------------------------------------------------------------------
这些知识都是针对16位系统的了。

对32位CPU来讲,int型数据有4个字节,即无符号最大数为0xFFFFFFFF,
有符号最大为0x7FFFFFFF。
无论是有符号,还是无符号,0xFFFF都没有超出最大范围,所以%u输出结果就是0xFFFF对应的正整数,65535

本回答被提问者采纳
相似回答