c++ 有没有一些架构的例子,其中int不能表示unsigned short的所有值,尽管后者更短?

ghhkc1vu  于 9个月前  发布在  其他
关注(0)|答案(1)|浏览(102)

有没有已知的架构例子,其中unsigned short小于int,但转换后仍然只能用unsigned int表示?

g6baxovj

g6baxovj1#

没有一个健全的编译器会使这成为可能(1)。
如果intshort宽一位,它可以表示shortunsigned short的所有值。例如:

  • 如果unsigned short是16位,则它可以表示[0,216)
  • 如果signed int宽一位,它可以表示[-216,216)(2)

参见[基本原理] p3。
您可能会问,因为从较窄类型到int/unsigned int的升级规则。如果intshort具有相同的位数,则unsigned short将升级为unsigned int。16位架构通常具有16位int和16位short
(1)* 从技术上讲 *,int可能比unsigned short大(就sizeof而言),但不会比unsigned short宽(就它可以表示的值而言),因为整数允许有填充位。然而,int虽然没有更宽,但更大是完全没有意义的,所以没有理智的编译器会这样做。
(2)在C++20之前,17位int的保证下限仅为-216+1。

相关问题