int是64位C#中的64位整数吗?

Guy*_*Guy 28 c# 64-bit primitive 32-bit

在我的C#源代码中,我可能已将整数声明为:

int i = 5;
Run Code Online (Sandbox Code Playgroud)

要么

Int32 i = 5;
Run Code Online (Sandbox Code Playgroud)

在目前流行的32位世界中,它们是等价的.但是,当我们进入64位世界时,我是否正确地说以下内容会变得相同?

int i = 5;
Int64 i = 5;
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 46

不.C#规范严格定义了这int是一个System.Int32具有正好32位的别名.改变这将是一个重大的突破性变化.

  • 而且,即使在x64中,据我所知,只有指针和大小(size_t)是64位宽,而默认整数仍然是32位宽. (3认同)
  • Asaf:在一些依赖于编译器的语言中.例如,在C++中,64位gcc定义长达64位,而Visual C++长达32位.C#不是这样的语言,决定是标准化的,而不是留给编译器供应商. (2认同)

Tom*_*cek 43

intC#中的关键字被定义为System.Int32类型的别名,这是(通过名称判断)意味着是32位整数.符合规范:

CLI规范部分8.2.2(内置值和引用类型)有一个包含以下内容的表:

  • System.Int32 - 有符号的32位整数

C#规范部分8.2.1(预定义类型)有一个类似的表:

  • int - 32位有符号整数类型

这保证了System.Int32CLR和intC#中的所有内容始终都是32位.

  • System.Int64很乐意知道这一点. (5认同)

Eri*_*ert 17

sizeof(testInt)会是8吗?

不,sizeof(testInt)是一个错误.testInt是一个局部变量.sizeof运算符需要一个类型作为其参数.这永远不会是8因为它总是会出错.

VS2010将ac#托管整数编译为4字节,即使在64位机器上也是如此.

正确.我注意到C#规范的第18.5.8节定义sizeof(int)为编译时常量4.也就是说,当你说 sizeof(int)编译器只是用4替换它时; 就像你在源代码中说"4"一样.

有没有人知道C#中标准的"int"是64/bit的时间是什么时候?

决不.C#规范的4.1.4节规定"int"是"System.Int32"的同义词.

如果你想要的是一个"指针大小的整数",那么使用IntPtr.IntPtr在不同的体系结构上更改其大小.


Blu*_*eft 11

intInt32在所有平台上始终是同义词.

微软将来不太可能改变它,因为它会破坏许多假定int为32位的现有代码.

  • 说到那个!MS认为向后兼容性很重要.语言的一致性是我<C#over C++的原因之一. (5认同)
  • @TomTom:......就是我说的. (4认同)
  • @ P.Brian.Mackey我和你在一起.感谢制造商,我们最终拥有一个C语言的语言,该语言足够大,可以实际定义其基本数据类型. (3认同)

Bri*_*eon 5

我认为你可能会感到困惑的是它int是一个别名,Int32所以它总是4个字节,但是IntPtr假设它与CPU架构的字大小匹配,所以它在32位系统上是4个字节,在8个字节上是8个字节一个64位系统.