求助一道c++题目,有关short int类型的小问题?

以下程序的运行结果是( )。
int main()
{ unsigned short a=65535;

short b;
b=a;
cout<<b;
return 0;
}
A) -32768 B) 32767 C) 65535 D) -1

为什么是选择-1呢?跟取值范围的关系是?

unsigned short
表示的范围是0~65535
short 表示的范围是-32768~32767
对于unsigned short在0~32767的部分,两者一致,对于unsigned short在32768~65535的部分,被平移到了-32768~-1
65535就是-1
选择d

unsigned short
表示的范围是0~65535
short 表示的范围是-32768~32767
65535 二进制码 ‭1111 1111 1111 1111 ‬两个字节 为正数 原码=反码=补码 计算机中数据以补码的形式保存
无符号位的扩展自行查询
当进行转换时 1111 1111 1111 1111 符号为1 ,则表示负数,原码=1111 1111 1111 1111 - 1 再取反
得到 1000 0000 0000 0001= -1