int
,System.Int16
,System.Int32
和System.Int64
除了尺寸之外有什么区别?
答案 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中所说:
int
和Int32
确实是同义词;int
会更多一点 熟悉的看,Int32
使32位更明确 阅读你的代码。我倾向于在我需要的地方使用int '整数',Int32
,其中大小很重要(加密代码, 因此,未来的维护者将会知道扩大安全性是安全的int
如果合适,但应注意更改Int32
个变量 以同样的方式。结果代码将是相同的:差异纯粹是其中之一 可读性或代码外观。
答案 1 :(得分:108)
这里唯一真正的区别是尺寸。这里的所有int类型都是有符号整数值,其大小各不相同
Int16
:2个字节Int32
和int
: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)
int
和int32
是同一个(32位整数)int16
是短整数(2字节或16位)int64
是长数据类型(8字节或64位)答案 7 :(得分:6)
它们都代表不同大小的整数。
然而,这是一个非常微小的差异。
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
答案 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
。