#include <stdio.h>
int main()
{
unsigned short a=-2;
unsigned int b=-2;
printf("%d %d",a,b);
return 0;
}
为什么打印结果一个是65534 一个是-2。
相当于a和b要转换成int 类型,因为%d是按int类型输出
unsigned short a=-2;时,a实际等于65534,转换成int还是65534
unsigned int b=-2;时,a实际等于42亿多,转换为int时,会溢出,溢出后就等于-2
问题的关键在于a是无符号短整型占用2个字节共16位,存储“1111 1111 1111 1110”。但输出用的是4字节的int 所以就是65534了。如果看不懂建议先学习一下原反补移码(是4种不同的编码)。
unsigned short [ int ] 的字节数位2,取值范围是 0 ~ 2^16-1,即 0 ~ 65535