求大神指导一下C语言基础知识

#include<stdio.h>

int main()

{

unsigned short i = -1;

unsigned int d = -1;

printf("%d\n", i);

printf("%d ", d);

return 0;

}

输出结果是 65535 -1 ; 有些不明白的是 网上说 d 的结果是-1,是因为%d是输出有符号的,%d将d强制转换为int型,那为什么 i 的值输出时也用到了%d而不是输出-1,输出结果是65535;我知道short数据类型时-1的补码是1111 1111 1111 1111(0xfffff),输出时%d不应该输出有符号吗?

%d是int型占位符,以%d输出一个无符号short型,会将高位两字节填为全0,因而入栈的数据是00000000 00000000 11111111 11111111,这是一个正数(符号位为0),值为65535。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-11-15
相似回答