-10用16进制输出为何为ffffff6
#include <stdio.h>
int main()
{
short int x = -10;
// 原码 - 1000 0000 0000 1010
// 反码 - 1111 1111 1111 0101
// 补码 - 1111 1111 1111 0110
// F F F 6(我以为的结果)
// 结果 - fffffff6, 好像占用4个字节
printf("%x\n", x);
}
刚开始看C语言,不太明白
求解,谢谢诸位
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
语言标准只规定了类型至少几个字节,以及几种类型之间的大小关系。
类型具体占多大由编译器决定。
李毅的回答是对的。你没用正确的%x修饰符输出,导致其实是按unsigned int输出的。
如果你改对了输出的修饰符之后,结果还是不符合预期,则可以用我上面的回答解释。
以
printf("%x", n)
的打印结果 ff ff ff f6,去判定参数 n 的长度为 4 字节,是错误的。根据 C 语言规范,printf 函数的 x 修饰符在没有指定长度时,默认转换成 unsigned int 类型。
即在本例中
printf("%x", n)
等同于printf("%x", (unsigned int)n)
。要将参数 n 按原数据类型打印,可以这样
参考
[1] C printf, http://www.cplusplus.com/refe...