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

Job*_*ian 213 .net c#

是什么区别int,System.Int16,System.Int32System.Int64其他比自己的尺寸?

小智 323

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

   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)
Run Code Online (Sandbox Code Playgroud)

正如James Sutherland在回答中所述:

intInt32确实的代名词; int将会更加熟悉,Int32使32位读取代码更加明确.我倾向于使用int,我只需要'整数',Int32其中大小很重要(加密代码,结构),所以未来的维护者会知道int如果合适的话放大一个是安全的 ,但是应该注意Int32以同样的方式改变变量.

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

  • @MartijnOtto问题标记为C#.在C#中,无论系统如何,`int`都是*always*`Int32`.也许你在想C++? (16认同)
  • @MattBaker:通常,在现代计算机上,int16占用的空间与int32(实际上是int64)一样多,因为为了使大多数操作高效,我们在数据周围填充以使访问对齐到32或64位边界(分别为32或64位模式).这是因为未对齐的访问在某些体系结构上是非常低效的,而在其他体系结构上则不可能. (8认同)
  • int和int32可以是同义词,但它们不一定是.如今,大多数销售的系统都是64位,在这种情况下,int将是64位. (7认同)
  • 对于Matthew T. Baker和其他像我一样的人来到这里试图从性能角度决定使用哪一个,你应该查看这篇文章,建议Integer在很多情况下比Int16更有效:http://stackoverflow.com/问题/ 129023 /净整数VS-INT16 (4认同)

Jar*_*Par 113

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

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

Int64和其他人之间有一个小的区别.在32位平台上,对Int64存储位置的分配不保证是原子的.所有其他类型都有保证.

  • +1为非原子位; 我不知道! (18认同)

Har*_*ris 68

INT

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

它映射到FCL类型的Int32.

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

它已签名并占用32位.

它的最小值为-2147483648,最大值为+2147483647.

INT16

这是一种FCL类型.

在C#中,short映射到Int16.

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

它已签名并占用16位.

它具有最小-32768和最大+32767值.

INT32

这是一种FCL类型.

在C#中,int映射到Int32.

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

它已签名并占用32位.

它的最小值为-2147483648,最大值为+2147483647.

Int64的

这是一种FCL类型.

在C#中,long映射到Int64.

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

它已签名并占用64位.

它的最小值为-9,223,372,036,854,775,808,最大值为9,223,372,036,854,775,807.


Pra*_*een 14

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

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

也,

在C#中,长映射到System.Int64,但是在不同的编程语言中,long可以映射到Int16或Int32.实际上,C++/CLI确实将long视为Int32.

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

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


Shi*_*ala 14

它们告诉整数变量可以存储什么大小。要记住大小,您可以考虑 :-) 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 = -9223372036854775808 到 9223372036854775807

简而言之,int16 中不能存储超过 32767 的值,int32 中不能存储超过 2147483647 的值,int64 中不能存储超过 9223372036854775807 的值。

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

int16vsint32vsint64


dus*_*uff 8

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


tno*_*007 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)
Run Code Online (Sandbox Code Playgroud)

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)
Run Code Online (Sandbox Code Playgroud)

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

  • 为了澄清为什么第一个例子以这种方式工作:第一个文字1,第2个和第3个被隐式地转换为"short"以使它们适合数组,而第二个文字1则保留为普通的`int`.`(int)1`不等于`(short)1`,`(short)2`,`(short)3`,因此结果为-1. (7认同)
  • C#版本可以进行类似的调整,但是FYI是一个简单的类型说明符修复了这个问题:`Array.IndexOf(new Int16(){1,2,3},1S)``Array.IndexOf(new Int32) (){1,2,3},1I)``Array.IndexOf(new Int64(){1,2,3},1L)`全部按预期工作. (4认同)

dea*_*rne 7

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


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

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

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

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

  • 不,这不适用于C#.AC#int的大小总是32位.对于C,是的,你必须处理这个复杂性,你经常在C代码中看到宏来处理变量int大小.见第18页的http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-334.pdf. (2认同)

Sun*_*B M 6

  1. int并且int32是一个相同的(32位整数)
  2. int16 是短整数(2个字节或16位)
  3. int64 是长数据类型(8字节或64位)

  • @mjs,这根本不是真的.在C#中,`int`是`Int32`的别名,因此始终保证为32位. (6认同)
  • 不,大卫·阿诺(David Arno)所说的是正确的。C#语言专门将“ int”定义为表示32位整数(Int32)。其他语言(C / C ++等)可能未指定,但是此问题标记为“ C#”。 (3认同)
  • int不保证是32位. (2认同)

thi*_*ish 5

它们确实是同义词,但是我发现它们之间的细微差别,

1)Int32创建时不能使用enum

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

enum Test : int
{ XXX = 1   // Works fine
}
Run Code Online (Sandbox Code Playgroud)

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