0

我查看了一些short在 C# 中使用的答案,但我不确定他们是否真的在这里回答了我的问题。short在 C++ 中是另一个名称吗int?我知道你可以 make short int,它似乎能够处理很多值,但我还在开始,所以很明显,如果它short不是很多值。但是在这个代码片段中:

short lives,aliensKilled;

它不使用int short,它只是使用short。所以我想我的问题是,如果我不低于 -32,768 或超过 32,767 ,我可以short用作替代品吗?int

另外,是否可以只替换shortint,只要我更改适当的内容,它就不会真正弄乱任何东西?(顺便说一句lives,并且aliensKilled都是变量名。)

4

7 回答 7

5

在 C++(和 C)中shortshort int、 和int short是同一类型的不同名称。此类型保证具有至少 -32,767..+32,767 的范围。(不,这不是错字。)

在大多数现代系统上,short是 16 位和int32 位。只要不超出 a 的范围,您就可以替换intwith而不会产生不良影响。在大多数现代系统上,超出 a 的范围通常会导致值回绕——标准保证这种行为,您不应依赖它,尤其是现在常见的 C++ 编译器将修剪包含有符号整数溢出的代码路径.shortshortshort

但是,在大多数情况下,用 替换 几乎没有什么int好处short。如果我至少有数千个,我只会替换int为。short并不总是有好处,通过使用short您可以减少使用的内存和所需的带宽,但您可以潜在地增加从转换为所需的 CPU 周期数short(当您对其进行算术运算时,intashort总是“提升”到)。int

于 2013-06-01T08:15:14.170 回答
2

short int,在 Cint shortshortC++ 中都是同义词。

这些工作类似于int,但范围更小(通常但不总是)16 位。只要没有任何代码依赖于数字“环绕”时的转换,因为它是 16 位(即,没有计算超出最大值 (SHORT_MAX) 或低于最小值 (SHORT_MIN)),使用较大的类型 ( int, long) 可以正常工作。

于 2013-06-01T08:16:24.293 回答
1

C++(以及 C# 和 Objective-C 以及 C 的其他直接后代)有一种奇怪的方式来命名和指定原始整数类型。

由 C++ 指定,shortint简单类型说明符,可以与关键字longsigned、 以及unsigned任何页面组合中的组合和匹配。

单一类型的一般模式short int[signed] short [int],也就是说signedint关键字是可选的。

请注意,即使intshort在特定平台上的大小相同,它们仍然是不同的类型。int至少具有相同的范围,short因此它在数字上是一个直接替换,但您不能在需要int *or的int &地方使用short *or short &。除此之外,C++ 还提供了各种处理类型的机制……对于围绕 编写的大型程序short,转换为int可能需要一些工作。

另请注意,short除非您确实有理由保存一些字节,否则声明某些内容没有任何好处。它的风格很差,会导致溢出错误,甚至会降低性能,因为今天的 CPU 没有针对 16 位操作进行优化。正如 Dietrich 所指出的,根据 C 算术语义的疯狂方式,在执行任何操作之前将short向上转换int,然后如果将结果分配回 a short,它会再次转换回。这种舞蹈通常没有效果,但仍会导致编译器警告甚至更糟。

无论如何,最佳实践是为typedef您自己的类型来完成您需要完成的任何工作。始终int默认使用,并利用int16_t, uint32_tfrom <stdint.h><cstdint>自 C++11 起)等,而不是依赖于平台相关的shortlong.

于 2013-06-01T09:02:07.647 回答
0

是的,short 等价于 short int,并且它使用至少 2 个字节,但是如果您保持在该范围内,您可以将 int 替换为 short 没有任何问题。

于 2013-06-01T08:14:57.103 回答
-1

是的,你可以使用它。短 = 短整数。有符号的 -32768 到 32767 和无符号的 0 到 65535 。

于 2013-06-01T08:15:47.197 回答
-2

short最多可以是两个字节长。在int是两个字节的机器上,shortint具有相同的范围,即 -32767 到 +32767。对于大多数新平台,int是 4 个字节,以适应更大范围的值。

我建议使用显式声明,例如 int16_t for short 和 int32_t for int 以避免任何混淆。

于 2013-06-01T08:22:12.277 回答
-2

另请注意,对于以下代码:

short a = 32767;
a++;
cout << a;

它将打印 -32768。

所以,如果你超过了它的限制,它会随着计数“返回”。

于 2013-06-01T08:22:12.823 回答