int,Int16,Int32和Int64有什么区别?

时间:2012-03-14 05:55:29

标签: c# .net

intSystem.Int16System.Int32System.Int64除了尺寸之外有什么区别?

12 个答案:

答案 0 :(得分:294)

每种类型的整数都有不同的存储容量范围

   Type      Capacity

   Int16 -- (-32,768 to +32,767)

   Int32 -- (-2,147,483,648 to +2,147,483,647)

   Int64 -- (-9,223,372,036,854,775,808 to +9,223,372,036,854,775,807)

James Sutherland在his answer中所说:

  

intInt32确实是同义词; int会更多一点   熟悉的看,Int32使32位更明确   阅读你的代码。我倾向于在我需要的地方使用int   '整数',Int32,其中大小很重要(加密代码,   因此,未来的维护者将会知道扩大安全性是安全的   int如果合适,但应注意更改Int32个变量   以同样的方式。

     

结果代码将是相同的:差异纯粹是其中之一   可读性或代码外观。

答案 1 :(得分:108)

这里唯一真正的区别是尺寸。这里的所有int类型都是有符号整数值,其大小各不相同

  • Int16:2个字节
  • Int32int:4个字节
  • Int64:8个字节

Int64与其他人之间存在一个小差异。在32位平台上,Int64存储位置的分配不保证是原子的。所有其他类型都有保证。

答案 2 :(得分:63)

<强> INT

它是C#中定义的原始数据类型。

它映射到FCL类型的Int32。

它是一个值类型,代表System.Int32 struct。

它已签名并占用32位。

最小值为-2147483648,最大值为+2147483647。

<强>的Int16

这是一种FCL类型。

在C#中, short 映射到Int16。

它是一个值类型,代表System.Int16结构。

签名并占用16位。

最小值为-32768,最大值为+32767。

<强>的Int32

这是一种FCL类型。

在C#中, int 映射到Int32。

它是一个值类型,代表System.Int32 struct。

它已签名并占用32位。

最小值为-2147483648,最大值为+2147483647。

<强>的Int64

这是一种FCL类型。

在C#中, long 映射到Int64。

它是一个值类型,代表System.Int64 struct。

签名并占用64位。

最低为-9,223,372,036,854,775,808,最高为9,223,372,036,854,775,807。

答案 3 :(得分:14)

根据Jeffrey Richter(.NET框架开发的贡献者之一)的书“CLR via C#”:

int是C#编译器允许的基本类型,而Int32是Framework类库类型(可用于遵循CLS的语言)。实际上,int在编译期间转换为Int32。

此外,

  

在C#中,长映射到System.Int64,但是在不同的编程中   language,long可以映射到Int16或Int32。实际上,C ++ / CLI可以   长期以待为Int32。

     

事实上,大多数(.NET)语言甚至不会将long视为关键字,也不会   编译使用它的代码。

我见过这个作者,许多关于.NET的标准文献都喜欢将FCL类型(即Int32)更喜欢特定于语言的原语类型(即int),主要是关于这种互操作性问题。

答案 4 :(得分:8)

关于16,32和64种类型的非常重要的说明:

如果您运行此查询... Array.IndexOf(new Int16 [] {1,2,3},1)

你假设得到零(0),因为你要求...在1,2或3的数组中是1。 如果得到-1作为答案,则表示1不在1,2或3的数组中。

请查看我发现的内容: 以下所有内容应该给你0而不是-1 (我在所有框架版本2.0,3.0,3.5,4.0中测试了这个)

C#:

Array.IndexOf(new Int16[]{1,2,3}, 1) = -1 (not correct)
Array.IndexOf(new Int32[]{1,2,3}, 1) = 0 (correct)
Array.IndexOf(new Int64[]{1,2,3}, 1) = 0 (correct)

VB.NET:

Array.IndexOf(new Int16(){1,2,3}, 1) = -1 (not correct)
Array.IndexOf(new Int32(){1,2,3}, 1) = 0 (correct)
Array.IndexOf(new Int64(){1,2,3}, 1) = -1 (not correct)

所以我的观点是,对于Array.IndexOf比较,只信任Int32!

答案 5 :(得分:7)

无。 类型之间的唯一区别是它们的大小(因此,它们可以表示的值范围)。

答案 6 :(得分:6)

  1. intint32是同一个(32位整数)
  2. int16是短整数(2字节或16位)
  3. int64是长数据类型(8字节或64位)

答案 7 :(得分:6)

编辑:对于C#来说,情况并非如此,这是我在回答这个问题时错过的标签 - 如果有更多C#特定的答案,请投票支持!


它们都代表不同大小的整数。

然而,这是一个非常微小的差异。

int16,int32和int64都具有固定的大小。

int的大小取决于您正在编译的体系结构 - C规范只将int定义为大于或等于short,但实际上它是您要定位的处理器的宽度,即可能 32位,但你应该知道它可能不是。

答案 8 :(得分:3)

他们两个确实是同义词,但我发现他们之间的差别很小,

1)创建Int32

时无法使用enum
enum Test : Int32
{ XXX = 1   // gives you compilation error
}

enum Test : int
{ XXX = 1   // Works fine
}

2)Int32属于系统声明。如果删除using.System,则会出现编译错误,但int

的情况则不然

答案 9 :(得分:3)

它们告诉我们可以在一个整数变量中存储多大的尺寸。要记住大小,您可以考虑 :-) 2 啤酒(2 字节)、4 啤酒(4 字节)或 8 啤酒(8 字节)。

  • Int16 :-2 啤酒/字节 = 16 位 = 2^16 = 65536 = 65536/2 = -32768 到 32767

  • Int32 :- 4 啤酒/字节 = 32 位 = 2^32 = 4294967296 = 4294967296/2 = -2147483648 到 2147483647

  • Int64 :- 8 啤酒/字节 = 64 位 = 2^64 = 18446744073709551616 = 18446744073709551616 /2 = -922337203682508 777775982508

<块引用>

简而言之,您可以在 int16 中存储超过 32767 个值,超过 int32 中的 2147483647 值和 9223372036854775807 中的值 int64。

要了解上述计算,您可以查看此视频 int16 vs int32 vs int64

int16vsint32vsint64

答案 10 :(得分:0)

以上人的答案大致正确,int、int16、int32...根据他们的数据容量而有所不同。但这就是编译器必须处理这些问题的原因——它是为了解决潜在的 2038 年问题。查看链接以了解更多信息。 https://en.wikipedia.org/wiki/Year_2038_problem

答案 11 :(得分:-6)

Int = Int32 - &gt;原始长型

Int16 - &gt;原始的int

Int64 - &gt; 64位系统后,新数据类型可用

“int”仅用于向后兼容。我们应该真正使用新的int类型来使我们的程序更精确。

---------------

还有一件事我注意到的是没有名为Int的类类似于Int16,Int32和Int64。所有有用的函数,如整数TryParse来自Int32.TryParse