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

时间:2008-10-02 21:13:47

标签: c# 64-bit 32-bit primitive

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

int i = 5;

Int32 i = 5;

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

int i = 5;
Int64 i = 5;

10 个答案:

答案 0 :(得分:46)

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

答案 1 :(得分:43)

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

  

CLI specification第8.2.2节(内置值和引用类型)有一个包含以下内容的表:

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

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

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

这可以保证CLR中的System.Int32和C#中的int始终都是32位。

答案 2 :(得分:17)

  

sizeof(testInt)会不会是8?

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

  

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

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

  

是否有人知道C#中标准“int”的时间是否为64位?

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

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

答案 3 :(得分:11)

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

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

答案 4 :(得分:5)

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

答案 5 :(得分:4)

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

答案 6 :(得分:3)

无论您使用的是32位版本还是64位版本的CLR,在C#中int始终意味着System.Int32long始终意味着{ {1}}。

答案 7 :(得分:3)

以下将在C#中使用always be true

sbyte 签名8位,1个字节

字节无符号8位,1字节

签名16位,2个字节

ushort 无符号16位,2个字节

int 签名32位,4个字节

uint 无符号32位,4字节

签名64位,8个字节

ulong 无符号64位,8字节

整数 literal 只是一个数字序列(例如314159,没有任何这些显式类型。 C#为它指定序列中的第一个类型( int uint long ulong ) 。在上述至少一个答案中,这似乎有点混乱。

Weirdly 一元减号运算符(减号)出现在一串数字之前将选项减少为( int )。文字总是积极的;减号确实是一个运营商。因此,大概-314159 与<{1}}完全相同。除了显然有一个特殊情况,让-((int)314159)直接进入 int ;否则它是-2147483648。我认为这会让事情变得不愉快。

不知何故,似乎可以安全地预测C#(和朋友)永远不会打扰&#34;软弱的名字&#34; &gt; = 128位整数的类型。只要处理器支持广泛的数学运算,并且几乎不使用任何数据,我们就可以很好地支持任意大整数和对UInt128,UInt256等的超精确支持。 64位地址空间真的大。如果它们太小,它会出于某种深奥的原因,如ASLR或更高效的MapReduce等。

答案 8 :(得分:0)

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

答案 9 :(得分:-1)

int without suffix可以是32位或64位,它取决于它所代表的值。

在MSDN中定义:

  

当整数文字没有后缀时,它的类型是这些类型中的第一个,其值可以表示为:int,uint,long,ulong。

这是地址: https://msdn.microsoft.com/en-us/library/5kzh1b5w.aspx