是否存在unsigned short短于int但int无法表示其所有值的架构实例?
结论:不存在这样的处理器架构
根据C语言标准的整数类型规则,原因如下:
- 题目要求
unsigned short的字长(sizeof(unsigned short))小于int的字长(sizeof(int)),意味着int的二进制位数(sizeof(int)*8)严格大于unsigned short的二进制位数(sizeof(unsigned short)*8)。 - 有符号类型
int的最大值为2^(sizeof(int)*8 - 1) - 1,无符号类型unsigned short的最大值为2^(sizeof(unsigned short)*8) - 1。 - 由于
sizeof(int) > sizeof(unsigned short),必然满足sizeof(int)*8 - 1 >= sizeof(unsigned short)*8(比如unsigned short为16位、int为32位时,32-1=31>16;哪怕int仅比unsigned short多8位,如unsigned short16位、int24位,24-1=23>16),因此int的最大值必然大于等于unsigned short的最大值。 - 且
unsigned short的取值全为非负数,int可完整覆盖这些非负值,所以int完全能容纳unsigned short的全部取值。
唯一会出现unsigned short无法被int容纳的场景,是sizeof(unsigned short) == sizeof(int)时(比如两者都是16位):此时unsigned short的最大值65535超出16位int的最大值32767,但这不符合题目中“unsigned short字长小于int”的前提。
内容的提问来源于stack exchange,提问作者CosmicHusky
相关产品推荐
相关产品推荐

