在C ++中,`int`是默认的`signed long int`吗?

时间:2011-12-29 23:34:57

标签: c++ types

C ++中默认为intsigned 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

6 个答案:

答案 0 :(得分:25)

普通int已签名,无论其大小与long int相同,是否与平台有关。

保证是什么

sizeof (int) <= sizeof (long)

int足以容纳至少-32767到32767的所有值。


标准是什么:( [basic.fundamental]部分:

  

有五种标准的有符号整数类型:signed charshort intintlong intlong long int。在此列表中,每种类型至少提供与列表中前面的存储一样多的存储空间。也可能存在实现定义的扩展有符号整数类型。标准和扩展有符号整数类型统称为有符号整数类型。普通int具有执行环境架构所建议的自然大小;提供其他有符号整数类型以满足特殊需求。

答案 1 :(得分:11)

所有整数类型都不同,即您可以安全地为所有这些类型重载函数,并且不会发生任何冲突。但是,有时使用相同数量的位来表示它们。即使它们使用相同数量的有符号和无符号类型,也总是具有不同的范围。除char之外,使用任何没有signed的整数类型等同于将其与signed一起使用,即signed intint是等效的。 char与[{1}}和signed char的类型不同,但unsigned char具有charsigned 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)charshortintlong之一。

这意味着所有整数类型的大小可以相同,只要这种类型至少保留64位(显然Cray X-MP就是这样的野兽)。在现代机器上long long,但有机器sizeof(int) == sizeof(long)sizeof(int) == sizeof(short)是32位还是64位取决于实际的体系结构,目前这两种类型都存在。

答案 2 :(得分:7)

普通int相当于signed int。这很标准。过去的任何事都无法保证; intlong是不同的类型,即使您的特定编译器使它们具有相同的大小。唯一的保证是long 至少int一样大。

答案 3 :(得分:5)

longshort修饰符与signedunsigned不完全相同。后两个可以放在任何整数类型上,但是如果你将它们关闭,那么signed是每个整数类型的默认char除外)。因此intsigned int属于同一类型。

对于longshort,如果您将其关闭,则不会选择,但结果类型不同。 long intshort intint都是不同类型,short int&lt; = int&lt; = long int

intlongshortsigned之后的unsigned是可选的:signed intsigned是相同的类型。

答案 4 :(得分:2)

在C ++中,int默认为signed int,因此没有问题。但是,intlong int在C ++中是不同的类型,因此从语言的角度来看,这是不一样的。 intlong int的实现是特定于平台/编译器的 - 它们都是可能相同的完整类型。 C ++标准规定的唯一限制是sizeof( long int ) >= sizeof( int )

答案 5 :(得分:1)

默认情况下,

signedint都与signed int相同。

两者的类型与signed short intsigned long int不同。