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

intSystem.Int16System.Int32System.Int64与它们的大小之间的区别是什么?

每种types的整数具有不同的存储容量范围

  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)在答复中所说

intInt32确实是同义词; int将会更加熟悉, Int32使32位对读取代码更加明确。 我会倾向于使用整数,我只是需要一个整数, Int32的大小是重要的(encryption代码,结构),所以未来的维护者会知道如果适当的话放大一个int是安全的,但应该小心改变Int32variables一样的方法。

由此产生的代码将是相同的:区别纯粹是可读性或代码外观之一。

这里唯一真正的区别是尺寸。 这里所有的inttypes都是带有不同大小的有符号整数值

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

Int64和其余的有一点区别。 在32位平台上,对Int64存储位置的分配不保证是primefaces性的。 这是所有其他types的保证。

INT

这是一个在C#中定义的原始数据types。

它映射到FCLtypes的Int32。

它是一个值types,代表System.Int32结构。

它被签名并占用32位。

它具有最小值-2147483648和最大值+2147483647的值。

INT16

这是一个FCLtypes。

在C#中, short被映射到Int16。

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

它被签名并占用16位。

最低值为-32768,最高值为+32767。

INT32

这是一个FCLtypes。

在C#中, int被映射到Int32。

它是一个值types,代表System.Int32结构。

它被签名并占用32位。

它具有最小值-2147483648和最大值+2147483647的值。

Int64的

这是一个FCLtypes。

在C#中, long被映射到Int64。

它是一个值types,代表System.Int64结构。

它被签名并占用64位。

最低-9,223,372,036,854,775,808和最高9,223,372,036,854,775,807价值。

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

int是C#编译器允许的基本types,而Int32是框架类库types(可用于遵守CLS的各种语言)。 事实上,int在编译期间转换为Int32。

也,

在C#中,long映射到System.Int64,但是在不同的编程语言中,long可以映射到Int16或Int32。 实际上,C ++ / CLI不会像Int32那样处理。

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

我已经看到了这个作者,许多关于.NET的标准文献更倾向于使用FCLtypes(即Int32)来使用特定于语言的基本types(即int),主要是考虑到这种互操作性问题。

关于16,32和64types的一个非常重要的说明:

如果你运行这个查询… 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.0testing过)

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!

没有。 types之间的唯一区别它们的大小(以及它们可以表示的值的范围)。

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

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

但是,这个差别非常小。

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

int的大小取决于你正在编译的体系结构 – C规范只定义了一个大于或等于一个短的int,但实际上它是你所处理的处理器的宽度,这可能是 32位的,但你应该知道这可能不是。


编辑:这是不正确的C#,我错过了当我回答这个问题的标签 – 如果有更多的C#特定的答案,请投票,而不是!

他们两人确实是同义词,但我发现他们之间的小差异,

1)创buildenum不能使用Int32

 enum Test : Int32 { XXX = 1 // gives you compilation error } enum Test : int { XXX = 1 // Works fine } 

2) Int32在系统声明下。 如果你删除using.System你会得到编译错误,但不是在int情况下

Int = Int32 – >原始长型

Int16 – >原始的int

Int64 – >新的数据types在64位系统之后变得可用

“int”只能用于向后兼容。 我们应该真正使用新的inttypes来使我们的程序更加精确。

—————

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