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

int i = 5;

或者

Int32 i = 5;

在当前流行的 32 位世界中,它们是等效的。然而,当我们进入 64 位世界时,我所说的以下内容将变得相同,对吗?

int i = 5;
Int64 i = 5;
有帮助吗?

解决方案

没有。 C#规范严格定义 int System.Int32 的别名,正好是32位。改变这将是主要突破性变化。

其他提示

int C# 中的关键字被定义为 System.Int32 类型(从名称来看)是一个 32 位整数。至规格:

CLI规范 第 8.2.2 节(内置值和引用类型)有一个表格,其中包含以下内容:

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

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

  • int - 32位有符号整型

这保证了双方 System.Int32 在 CLR 中和 int 在 C# 中将始终是 32 位。

  

sizeof(testInt)会不会是8?

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

  

VS2010将c#托管整数编译为4个字节,即使在64位计算机上也是如此。

正确。我注意到C#规范的第18.5.8节将 sizeof(int)定义为编译时常量4.也就是说,当你说 sizeof(int)时编译器简单地将其替换为4;就好像你说“4”一样。在源代码中。

  

有没有人知道是否/何时会出现标准的“int”时间。在C#中将是64位?

从不。 C#规范的4.1.4节规定了“int”。是“System.Int32”的同义词。

如果你想要的是一个“指针大小的整数”,然后使用IntPtr。 IntPtr在不同的体系结构上更改其大小。

int 始终与所有平台上的 Int32 同义。

微软将来不太可能改变这种情况,因为它会破坏许多假设 int 为32位的现有代码。

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

根据C#规范 ECMA-334 ,section“11.1.4 Simple Types”,保留字 int 将别名为 System.Int32 。由于这是在规范中,因此不太可能改变。

无论您使用的是32位版本还是64位版本的CLR,在C#中 int 始终意味着 System.Int32 和< code> long 总是指 System.Int64

是的,正如Jon所说,与'C / C ++世界'不同,Java和C#并不依赖于他们正在运行的系统。它们严格定义了byte / short / int / long和单/双精度浮点数的长度,在每个系统上都相等。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top