C ++中默认为int
是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
答案 0 :(得分:25)
普通int
已签名,无论其大小与long int
相同,是否与平台有关。
保证是什么
sizeof (int) <= sizeof (long)
和int
足以容纳至少-32767到32767的所有值。
标准是什么:( [basic.fundamental]
部分:
有五种标准的有符号整数类型:
signed char
,short int
,int
,long int
和long long int
。在此列表中,每种类型至少提供与列表中前面的存储一样多的存储空间。也可能存在实现定义的扩展有符号整数类型。标准和扩展有符号整数类型统称为有符号整数类型。普通int
具有执行环境架构所建议的自然大小;提供其他有符号整数类型以满足特殊需求。
答案 1 :(得分:11)
所有整数类型都不同,即您可以安全地为所有这些类型重载函数,并且不会发生任何冲突。但是,有时使用相同数量的位来表示它们。即使它们使用相同数量的有符号和无符号类型,也总是具有不同的范围。除char
之外,使用任何没有signed
的整数类型等同于将其与signed
一起使用,即signed int
和int
是等效的。 char
与[{1}}和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)
(其中“X”是sizeof(signed X) == sizeof(unsigned X)
,char
,short
,int
和long
之一。
这意味着所有整数类型的大小可以相同,只要这种类型至少保留64位(显然Cray X-MP就是这样的野兽)。在现代机器上long long
,但有机器sizeof(int) == sizeof(long)
。 sizeof(int) == sizeof(short)
是32位还是64位取决于实际的体系结构,目前这两种类型都存在。
答案 2 :(得分:7)
普通int
相当于signed int
。这很标准。过去的任何事都无法保证; int
和long
是不同的类型,即使您的特定编译器使它们具有相同的大小。唯一的保证是long
至少与int
一样大。
答案 3 :(得分:5)
long
和short
修饰符与signed
和unsigned
不完全相同。后两个可以放在任何整数类型上,但是如果你将它们关闭,那么signed
是每个整数类型的默认(char
除外)。因此int
和signed int
属于同一类型。
对于long
和short
,如果您将其关闭,则不会选择,但结果类型不同。 long int
,short int
和int
都是不同类型,short int
&lt; = int
&lt; = long int
。
int
,long
,short
和signed
之后的unsigned
是可选的:signed int
和signed
是相同的类型。
答案 4 :(得分:2)
在C ++中,int
默认为signed int
,因此没有问题。但是,int
和long int
在C ++中是不同的类型,因此从语言的角度来看,这是不一样的。 int
和long int
的实现是特定于平台/编译器的 - 它们都是可能相同的完整类型。 C ++标准规定的唯一限制是sizeof( long int ) >= sizeof( int )
。
答案 5 :(得分:1)
signed
和int
都与signed int
相同。
两者的类型与signed short int
或signed long int
不同。