我看过一些在C#中使用short
的答案,但我不确定他们是否真的在这里回答了我的问题。 C ++中的short
是int
的另一个名称吗?我知道你可以制作short int
,它似乎能够处理很多值但是我还在开始,所以很明显,如果它是short
,那就不是很多值了。但是在这里的代码片段中:
short lives,aliensKilled;
它不使用int short
,只使用short
。所以我想我的问题是,如果我不低于-32,768或超过32,767,我可以使用short
代替int
吗?
此外,将short
替换为int
是否可以,只要我更改适当的内容,它就不会真正搞乱任何东西? (顺便提一句lives
和aliensKilled
都是变量名。)
答案 0 :(得分:5)
在C ++(和C)中,short
,short int
和int short
是同一类型的不同名称。保证此类型的范围至少为-32,767 .. + 32,767。 (不,这不是一个错字。)
在大多数现代系统中,short
为16位,int
为32位。只要不超出int
的范围,您就可以将short
替换为short
而不会产生不良影响。在大多数现代系统中,超出short
的范围通常会导致值环绕 - 此行为不由标准保证,您应该不依赖它,特别是现在常见的C ++编译器将修剪包含有符号整数溢出的代码路径。
但是,在大多数情况下,用int
替换short
几乎没有什么好处。我只会将int
替换为short
,如果我至少有数千个short
。使用short
可以减少所使用的内存和所需的带宽并不总是有好处,但是可能可能增加从int
转换所需的CPU周期数到short
(int
在对其进行算术运算时始终被“提升”为{{1}}。
答案 1 :(得分:2)
short int
,int short
和short
在C和C ++中都是同义词。
这些工作类似int
,但范围较小(通常但不总是)16位。只要没有代码依赖于转换,当数字“环绕”时由于它是16位(即,没有计算超过最高值(SHORT_MAX)或低于最低值(SHORT_MIN)),使用较大的类型(int
,long
)可以正常工作。
答案 2 :(得分:1)
C ++(以及C#和Objective-C以及C的其他直接后代)有一种奇怪的方式来命名和指定基本的整数类型。
根据C ++的规定,short
和int
是简单类型说明符,可以与关键字long
混合和匹配,{ {1}}和signed
任意一个页面组合。
单一类型unsigned
的一般模式是short int
,也就是说[signed] short [int]
和signed
关键字是可选的。
请注意,即使int
和int
在特定平台上的大小相同,它们仍然是不同的类型。 short
至少与int
的范围相同,因此它在数字上是替代品,但您不能使用short
或int *
int &
}或short *
是必需的。除了C ++提供了各种类型的机器...对于围绕short &
编写的大型程序,转换为short
可能需要一些工作。
另请注意,除非您确实有理由保存几个字节,否则声明int
没有任何好处。它风格很差并导致溢出错误,甚至可能降低性能,因为当今的CPU并未针对16位操作进行优化。正如Dietrich指出的那样,根据指定C算术语义的疯狂方式,short
在执行任何操作之前被上转到short
,然后如果结果被分配回int
,它又回来了。这种舞蹈通常没有效果,但仍然会导致编译器警告,甚至更糟。
在任何情况下,最佳做法是short
您自己的类型,无论您需要完成哪些工作。默认情况下始终使用typedef
,并使用int
int16_t
(uint32_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。
所以,如果你超过它的限制,它将“返回”计数。