`short`和C ++中的`int`是一样的吗?

时间:2013-06-01 08:10:41

标签: c++ int short

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

short lives,aliensKilled;

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

此外,将short替换为int是否可以,只要我更改适当的内容,它就不会真正搞乱任何东西? (顺便提一句livesaliensKilled都是变量名。)

7 个答案:

答案 0 :(得分:5)

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

在大多数现代系统中,short为16位,int为32位。只要不超出int的范围,您就可以将short替换为short而不会产生不良影响。在大多数现代系统中,超出short的范围通常会导致值环绕 - 此行为由标准保证,您应该依赖它,特别是现在常见的C ++编译器将修剪包含有符号整数溢出的代码路径。

但是,在大多数情况下,用int替换short几乎没有什么好处。我只会将int替换为short,如果我至少有数千个short。使用short可以减少所使用的内存和所需的带宽并不总是有好处,但是可能可能增加从int转换所需的CPU周期数到shortint在对其进行算术运算时始终被“提升”为{{1}}。

答案 1 :(得分:2)

short intint shortshort在C和C ++中都是同义词。

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

答案 2 :(得分:1)

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

根据C ++的规定,shortint简单类型说明符,可以与关键字long混合和匹配,{ {1}}和signed任意一个页面组合。

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

请注意,即使intint在特定平台上的大小相同,它们仍然是不同的类型。 short至少与int的范围相同,因此它在数字上是替代品,但您不能使用shortint * int & }或short *是必需的。除了C ++提供了各种类型的机器...对于围绕short &编写的大型程序,转换为short可能需要一些工作。

另请注意,除非您确实有理由保存几个字节,否则声明int没有任何好处。它风格很差并导致溢出错误,甚至可能降低性能,因为当今的CPU并未针对16位操作进行优化。正如Dietrich指出的那样,根据指定C算术语义的疯狂方式,short在执行任何操作之前被上转到short,然后如果结果被分配回int ,它又回来了。这种舞蹈通常没有效果,但仍然会导致编译器警告,甚至更糟。

在任何情况下,最佳做法是short您自己的类型,无论您需要完成哪些工作。默认情况下始终使用typedef,并使用int int16_tuint32_t自C ++ 11以来)等来使用<stdint.h>,而不是依赖于平台相关<cstdint>short

答案 3 :(得分:0)

是的,short相当于short int,它至少使用2个字节,但如果你保持在范围内,你可以用short替换int而没有任何问题。

答案 4 :(得分:-1)

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

答案 5 :(得分:-2)

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

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

答案 6 :(得分:-2)

另请注意以下代码:

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

它将打印-32768。

所以,如果你超过它的限制,它将“返回”计数。