在c++中默认为' int ' ' signed long int '

Is `int` by default `signed long int` in C++?

本文关键字:int signed long c++ 默认      更新时间:2023-10-16

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 charshort intintlong intlong long int。在此列表中,每种类型提供的存储空间至少与列表中前面的类型相同。也可能存在实现定义的扩展有符号整数类型。标准和扩展的有符号整数类型统称为有符号整数类型。普通int具有执行环境体系结构所建议的自然大小;其他有符号整数类型是为满足特殊需要而提供的。

所有的整数类型都是不同的,也就是说,你可以安全地为所有的重载函数,你不会得到任何冲突。然而,有时使用相同的位数来表示它们。即使它们使用相同的位数,有符号和无符号类型也总是有不同的范围。除了char,使用任何不带signed的整数类型都等同于带signed,即signed intint是等价的。charsigned charunsigned char是不同的类型,但char具有与signed charunsigned 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"为charshortintlonglong long中的一个)。

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

普通int相当于signed int。这是标准的。过去的一切都不能保证;intlong是不同的类型,即使您的特定编译器使它们的大小相同。你唯一能保证的是long至少和int一样大

longshort修饰语不完全像signedunsigned。后两个可以放在任何整数类型上,但是如果不使用它们,则signed是每种整数类型的默认 (char除外)。所以intsigned int是相同的类型。

对于longshort,如果不选中它们,则两者都不选择,但结果类型不同。long intshort intint为不同类型,short int <= int <= long int

longshortsignedunsigned后面的int可选,signed intsigned是同一类型

在c++中int默认是signed int,所以没有问题。然而,intlong int在c++中是不同的类型,所以从语言的角度来看,这是不一样的。intlong int的实现是特定于平台/编译器的——它们都是整型,可能是相同的。c++标准施加的唯一限制是sizeof( long int ) >= sizeof( int ) .

signedint默认与signed int相同。

signed short intsigned long int都不是同一类型。