这些结果不一定对的。之所以说不完全对是因为不同的系统对printf 的参数处理方式可能不一样。常见的会把 short 升级为int哦
#include
void main() {
short i;
i=-4;
printf("\ni:dec=%d, oct=%o, hex=%x, unsigned=%u\n",i,i,i,i);
}
我们假设 printf不会把 short 升级为 int, 那么我们有
short 是 16位 二进制
原码 short 4 = 0000 0000 0000 0100
反码 short -4 = 1111 1111 1111 1011
补码 short -4 = 1111 1111 1111 1100
因此 八进制是 0177774 ,十六进制是 0xfffc
如果把这个数看做无符号数,那么就是 65532
计算机以补码存放数据-4补码为 short 两个字节16位。1111,1111,1111,1100。剩下的进制转化下就可以得到你那些答案