在c++中默认为' int ' ' signed long int '
Is `int` by default `signed long int` in C++?
int
在c++中是默认的signed long int
吗?
是否依赖于平台和/或编译器?如果有,怎么做?
[编辑]下列任何项保证是重复的吗?
signed short int
signed int
signed long int
signed long long int
unsigned short int
unsigned int
unsigned long int
unsigned long long int
plain int
已签名,与long int
大小是否相同取决于平台。
可以保证的是
sizeof (int) <= sizeof (long)
和int
足够大,至少可以容纳从-32767到32767的所有值。
标准内容:([basic.fundamental]
:
有5种标准的有符号整数类型:
signed char
、short int
、int
、long int
和long long int
。在此列表中,每种类型提供的存储空间至少与列表中前面的类型相同。也可能存在实现定义的扩展有符号整数类型。标准和扩展的有符号整数类型统称为有符号整数类型。普通int
具有执行环境体系结构所建议的自然大小;其他有符号整数类型是为满足特殊需要而提供的。
所有的整数类型都是不同的,也就是说,你可以安全地为所有的重载函数,你不会得到任何冲突。然而,有时使用相同的位数来表示它们。即使它们使用相同的位数,有符号和无符号类型也总是有不同的范围。除了char
,使用任何不带signed
的整数类型都等同于带signed
,即signed int
和int
是等价的。char
与signed char
和unsigned char
是不同的类型,但char
具有与signed char
或unsigned char
相同的表示和范围。您可以使用std::numeric_limits<char>::is_signed
来查找它使用的是哪个
说说更有趣的方面。以下条件均为真:
-
7 <= std::numeric_limits<signed char>::digits
-
sizeof(char) == 1
-
sizeof(char) == sizeof(signed char)
-
sizeof(char) == sizeof(unsigned char)
-
15 <= std::numeric_limits<short>::digits
-
sizeof(char) <= sizeof(short)
-
sizeof(short) <= sizeof(int)
-
31 <= std::numeric_limits<long>::digits
-
sizeof(int) <= sizeof(long)
-
63 <= std::numeric_limits<long long>::digits
-
sizeof(long) <= sizeof(long long)
-
sizeof(X) == sizeof(signed X)
-
sizeof(signed X) == sizeof(unsigned X)
(其中"X"为char
、short
、int
、long
、long long
中的一个)。
这意味着所有整数类型的大小可以是相同的,只要这些类型至少包含64位(显然Cray X-MP就是这样一个野兽)。在现代机器上,通常是sizeof(int) == sizeof(long)
,但也有一些机器使用sizeof(int) == sizeof(short)
。long
是32位还是64位取决于实际的体系结构,目前这两种类型都存在。
普通int
相当于signed int
。这是标准的。过去的一切都不能保证;int
和long
是不同的类型,即使您的特定编译器使它们的大小相同。你唯一能保证的是long
至少和int
一样大
long
和short
修饰语不完全像signed
和unsigned
。后两个可以放在任何整数类型上,但是如果不使用它们,则signed
是每种整数类型的默认 (char
除外)。所以int
和signed int
是相同的类型。
对于long
和short
,如果不选中它们,则两者都不选择,但结果类型不同。long int
、short int
、int
为不同类型,short int
<= int
<= long int
。
long
、short
、signed
、unsigned
后面的int
可选,signed int
和signed
是同一类型
在c++中int
默认是signed int
,所以没有问题。然而,int
和long int
在c++中是不同的类型,所以从语言的角度来看,这是不一样的。int
和long int
的实现是特定于平台/编译器的——它们都是整型,可能是相同的。c++标准施加的唯一限制是sizeof( long int ) >= sizeof( int )
.
signed
和int
默认与signed int
相同。
与signed short int
或signed long int
都不是同一类型。
- 为什么在全局范围内使用"extern int a"似乎不行?
- int(c) 和 c-'0' 之间的区别。C++
- 从"int*"强制转换为"unsigned int"会丢失精度错误
- 为什么野牛仍在使用"int yylex(void)",却找不到"int yylex(YYS
- 有符号的int和int-有没有一种方法可以在C++中区分它们
- 请解释这句话(cout<<1+int((a<b)^((b-a)&1) )<<endl
- 是否可以从int转换为enum类类型
- 不能在初始值设定项列表中将非常量表达式从类型 'int' 缩小到'unsigned long long'
- 向量 <int> a {N, 0} 和 int arr a[N] = {0} 的时间复杂度有什么区别
- 'short int'持有的值溢出,但"自动"不会溢出?
- 如何在C++中将一个无符号的 int 转换为两个无符号的短裤?
- 调用'begin(int [n])'没有匹配函数
- 没有显式声明的int[]中的foreach
- 在c++中访问int到类对象的映射时出错
- 为什么我无法更改"set<set>"循环中的值<int>
- unsigned int/signed int/long-long:无法解释的输出
- 为什么 foo(short int *) 和 bar(signed short *) 认为 QT 的签名不同
- 对'icu_56::UnicodeString::UnicodeString(signed char, unsigned short const*, int)' 的未定义引用
- 在c++中默认为' int ' ' signed long int '
- 在unsigned int和signed int之间进行安全转换