C++中的“短”与“int”相同吗?
Is `short` the same as `int` in C++?
我看过一些在 C# 中使用short
的答案,但我不确定它们是否真的回答了我的问题。short
C++int
的另一个名字吗?我知道你可以做short int
,这似乎能够处理很多值,但我仍然在开始,所以显然如果它是short
它不是很多值。但是在这里的这个代码片段中:
short lives,aliensKilled;
它不使用int short
,它只使用short
。所以我想我的问题是,如果我不低于 -32,768 或超过 32,767,我可以用short
代替int
吗?
另外,用int
替换short
可以吗,只要我改变适当的东西,它就不会真正弄乱任何东西?(顺便说一句,lives
和aliensKilled
都是变量名。
在C++(和 C(中,short
、short int
和 int short
是同一类型的不同名称。 此类型保证的范围至少为 -32,767..+32,767。 (不,这不是错字。
在大多数现代系统上,short
为 16 位,int
为 32 位。 您可以用short
替换int
而不会产生不良影响,只要不超过short
的范围。 在大多数现代系统上,超出short
的范围通常会导致值环绕 - 标准不能保证此行为,您不应依赖它,尤其是现在常见的C++编译器将修剪包含有符号整数溢出的代码路径。
但是,在大多数情况下,用short
替换int
几乎没有好处。 如果我至少有数千个,我只会用short
替换int
。 使用short
并不总是有好处,您可以减少使用的内存和所需的带宽,但您可能会增加从short
转换为int
所需的 CPU 周期数(当您对short
进行算术时,它总是"提升"为int
(。
short int
,int short
和short
在C和C++中都是同义词。
这些工作原理与int
类似,但范围较小(通常,但并非总是(16位。只要当数字由于 16 位而"环绕"时,没有代码依赖于转换(也就是说,没有计算超过最大值 (SHORT_MAX( 或低于最低值 (SHORT_MIN((,使用更大的类型(int
、long
(就可以了。
C++(以及C#和Objective-C以及C的其他直系后代(有一种古怪的方式来命名和指定原始整型。
如C++所述,short
和int
是简单的类型说明符,可以与关键字long
、signed
和unsigned
混合搭配在充满组合的页面中的任何一个。
单一类型short int
的一般模式是[signed] short [int]
,也就是说signed
和int
关键字是可选的。
请注意,即使int
和short
在特定平台上的大小相同,它们仍然是不同的类型。 int
的范围至少与 short
相同,因此它在数字上是一个直接替换,但您不能在需要short *
或short &
的地方使用int *
或int &
。除此之外,C++还提供各种用于处理类型的机器......对于一个围绕short
编写的大型程序,转换为int
可能需要一些工作。
另请注意,声明某些内容short
没有任何好处,除非您确实有理由保存几个字节。这是糟糕的风格,会导致溢出错误,甚至会降低性能,因为今天的 CPU 没有针对 16 位操作进行优化。正如 Dietrich 所指出的,根据指定 C 算术语义的疯狂方式,在执行任何操作之前,short
被向上转换为 int
,然后如果结果被分配回short
,它又被转换回来。这种舞蹈通常没有效果,但仍可能导致编译器警告甚至更糟。
无论如何,最佳做法是为您需要完成的任何工作typedef
自己的类型。默认情况下始终使用int
,并利用int16_t
,uint32_t
来自<stdint.h>
(自C++11以来<cstdint>
(等,而不是依赖依赖于平台的short
和long
。
是的,short 相当于 short int,它至少使用 2 个字节,但如果你保持在这个范围内,你可以用 short 替换 int,没有任何问题。
是的,您可以使用它。 短 = 短内。 有符号 -32768 到 32767 和无符号 0 到 65535 。
短的长度最多可以有两个字节。在 int 为两个字节的机器上,short 和 int 具有相同的范围,即 -32767 到 +32767。对于大多数新平台,int 是 4 个字节,迎合了更大的值范围。
我建议使用显式声明,例如 int16_t 简称和 int32_t 表示 int,以避免任何混淆。
另请注意,对于以下代码:
short a = 32767;
a++;
cout << a;
它将打印 -32768。
因此,如果您超过其限制,它将"返回"计数。
- 将成员变量添加到共享库中的类中,不会破坏二进制兼容性吗
- .cpp和.h文件中的模板专用化声明
- 反向给定链表中的K节点
- 正在查找文档以获得PS4平台的C++中的设备信息
- enum是C++中的宏变量还是整数变量
- 使用C++库在Android项目中修改gradle中的cmake参数,用于插入指令的测试
- 将字符串存储在c++中的稳定内存中
- 文本文件中的单词链表
- 递归函数计算序列中的平方和(并输出过程)
- 如何从C++中的依赖类型中获得它所依赖的类型
- C++中的"inline"关键字
- 如何运行位于boost/libs/python/example/tutorial目录中的hello.cpp和Jamfil
- 如何使用 < 和 > 命令获取 c++ 中的输入和输出?
- 用C++中的一个变量定义一个常量
- vector.resize()中的分配错误
- 使用指针从C++中的数组中获取最大值
- arr[-1]在c++中的奇怪行为
- 具有奇怪重复模板模式的派生类中的成员变量已损坏
- 将值指定给向量(2D)的向量中的某个位置
- 内置函数可查看CPP中的成员变量