int,Int16,Int32和Int64有什么区别?
int
, System.Int16
, System.Int32
和System.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)在答复中所说
int
和Int32
确实是同义词;int
将会更加熟悉,Int32
使32位对读取代码更加明确。 我会倾向于使用整数,我只是需要一个整数,Int32
的大小是重要的(encryption代码,结构),所以未来的维护者会知道如果适当的话放大一个int
是安全的,但应该小心改变Int32
variables一样的方法。由此产生的代码将是相同的:区别纯粹是可读性或代码外观之一。
这里唯一真正的区别是尺寸。 这里所有的inttypes都是带有不同大小的有符号整数值
-
Int16
:2个字节 -
Int32
和int
: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之间的唯一区别是它们的大小(以及它们可以表示的值的范围)。
-
int
和int32
是一样的(32位整数) -
int16
是短整型(2字节或16位) -
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
。