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

时间:2020-03-06 15:03:04  来源:igfitidea点击:

在我的Csource代码中,我可能将整数声明为:

int i = 5;

或者

Int32 i = 5;

在当前流行的32位环境中,它们是等效的。但是,当我们进入64位世界时,我是否正确地说以下内容将是相同的?

int i = 5;
Int64 i = 5;

解决方案

否。Cspecification严格地定义" int"是" System.Int32"的别名,其位数恰好为32位。改变这将是一个重大的突破性变化。

是的,正如乔恩所说,与" C / C ++世界"不同,Java和Caren并不依赖于它们所运行的系统。它们具有严格定义的字节/短/整数/长和单/双精度浮点数的长度,在每个系统上均相等。

无论我们使用的是CLR的32位版本还是64位版本,在in中Can int始终表示System.Int32,而long in始终表示System.Int64.

在所有平台上,int'始终是Int32`的同义词。

Microsoft极不可能在将来更改它,因为它将破坏许多现有的假定" int"为32位的代码。

Cis中的int关键字定义为System.Int32类型的别名,并且(根据名称判断)它是32位整数。到规格:

CLI specification section 8.2.2 (Built-in value and reference types) has a table with the following:
  
  
  System.Int32 - Signed 32-bit integer
  
  
  C# specification section 8.2.1 (Predefined types) has a similar table:
  
  
  int - 32-bit signed integral type

这样可以保证CLR中的System.Int32和C中的int始终为32位。

根据ECMA-334规范的" 11.1.4简单类型"部分,保留字" int"将别名为" System.Int32"。由于这是规范中的内容,因此更改的可能性很小。

我认为我们可能会感到困惑的是,int是Int32的别名,因此它将始终为4个字节,但是IntPtr`应该是与CPU体系结构的字长匹配的,因此它将为4个字节。一个32位系统和一个64位系统上的8个字节。

Will sizeof(testInt) ever be 8?

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

VS2010 compiles a c# managed integer as 4 bytes, even on a 64 bit machine.

正确的。我注意到Cspecification的18.5.8节将sizeof(int)定义为编译时常量4. 也就是说,当我们说sizeof(int)时,编译器只是将其替换为4;而当我们说sizeof(int)时,编译器将其替换为4. 就像我们在源代码中说" 4"一样。

Does anyone know if/when the time will come that a standard "int" in C# will be 64 bits?

绝不。 Cspecification的4.1.4节声明" int"是" System.Int32"的同义词。

如果我们要的是"指针大小的整数",请使用IntPtr。 IntPtr在不同的体系结构上会更改其大小。