有没有已知的架构例子,其中unsigned short小于int,但转换后仍然只能用unsigned int表示?
g6baxovj1#
没有一个健全的编译器会使这成为可能(1)。如果int比short宽一位,它可以表示short和unsigned short的所有值。例如:
int
short
unsigned short
signed int
参见[基本原理] p3。您可能会问,因为从较窄类型到int/unsigned int的升级规则。如果int和short具有相同的位数,则unsigned short将升级为unsigned int。16位架构通常具有16位int和16位short。(1)* 从技术上讲 *,int可能比unsigned short大(就sizeof而言),但不会比unsigned short宽(就它可以表示的值而言),因为整数允许有填充位。然而,int虽然没有更宽,但更大是完全没有意义的,所以没有理智的编译器会这样做。(2)在C++20之前,17位int的保证下限仅为-216+1。
unsigned int
sizeof
1条答案
按热度按时间g6baxovj1#
没有一个健全的编译器会使这成为可能(1)。
如果
int
比short
宽一位,它可以表示short
和unsigned short
的所有值。例如:unsigned short
是16位,则它可以表示[0,216)signed int
宽一位,它可以表示[-216,216)(2)参见[基本原理] p3。
您可能会问,因为从较窄类型到
int
/unsigned int
的升级规则。如果int
和short
具有相同的位数,则unsigned short
将升级为unsigned int
。16位架构通常具有16位int
和16位short
。(1)* 从技术上讲 *,
int
可能比unsigned short
大(就sizeof
而言),但不会比unsigned short
宽(就它可以表示的值而言),因为整数允许有填充位。然而,int
虽然没有更宽,但更大是完全没有意义的,所以没有理智的编译器会这样做。(2)在C++20之前,17位
int
的保证下限仅为-216+1。