int是64位C#中的64位整数吗?
在我的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在不同的体系结构上会更改其大小。