long和int数据类型之间的区别

Ale*_*lex 46 c++ size types integer

考虑到以下语句返回4,C++中的intlong类型之间有什么区别?

sizeof(int)
sizeof(long)
Run Code Online (Sandbox Code Playgroud)

Pau*_*ier 53

这个参考:

int最初旨在成为处理器的"自然"字大小.许多现代处理器可以轻松处理不同的字大小.

还有,这一点:

在许多(但不是全部)C和C++实现中,long大于int.今天最流行的桌面平台,如Windows和Linux,主要运行在32位处理器上,大多数这些平台的编译器都使用32位int,它具有相同的大小和表示形式.


Dan*_*son 42

标准给你的保证是这样的:

1 == sizeof(char) <= sizeof(short) <= sizeof (int) <= sizeof(long) <= sizeof(long long)
Run Code Online (Sandbox Code Playgroud)

所以它完全有效sizeof (int)并且sizeof (long)平等,许多平台选择采用这种方法.你会发现一些平台int是32位,long是64位,long long是128位,但似乎很常见的sizeof (long)是4.

(注意,long long从C99开始在C中识别,但通常在C++ 11之前作为C++中的扩展实现.)


Jon*_*ler 17

您使用的是32位计算机或64位Windows计算机.在我的64位机器上(运行Unix衍生的操作系统,而不是Windows)sizeof(int) == 4,但是sizeof(long) == 8.

它们是不同的类型 - 有时彼此相同,有时不相同.

(在真正的过去,sizeof(int) == 2以及sizeof(long) == 4-尽管这可能是以前的C++存在的几天来,对想起来还,在技术上,它是一个合法的配置,虽然在嵌入式领域的不同寻常之外,相当甚至可能是不寻常的.嵌入式空间.)

  • 请注意,它取决于编译器以及机器.在MSVC中,sizeof(long)== 4即使在64位Windows上也是如此. (9认同)
  • 我不认为你的第一个陈述是不准确的,只是一个公平的猜测.我担心第二个可能会导致人们错误地认为你的长片是8个字节,这是你的机器是64位的必然结果,而实际上它是编译器的间接属性. (8认同)