是什么区别int
,System.Int16
,System.Int32
和System.Int64
其他比自己的尺寸?
是什么区别int
,System.Int16
,System.Int32
和System.Int64
其他比自己的尺寸?
Answers:
每种类型的整数都有不同的存储容量范围
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
地方使用int,在整数很重要的地方(密码,结构),以便将来的维护人员知道int
适当的话可以安全地放大 int ,但应注意Int32
以相同的方式更改变量。生成的代码将是相同的:区别纯粹是可读性或代码外观之一。
整型
它是用C#定义的原始数据类型。
它映射到FCL类型的Int32。
它是一个值类型,代表System.Int32结构。
它是有符号的,需要32位。
它的最小值为-2147483648,最大值为+2147483647。
16位
这是FCL类型。
在C#中,short映射到Int16。
它是一个值类型,表示System.Int16结构。
它被签名并占用16位。
它的最小值为-32768,最大值为+32767。
32位
这是FCL类型。
在C#中,int映射到Int32。
它是一个值类型,代表System.Int32结构。
它是有符号的,需要32位。
它的最小值为-2147483648,最大值为+2147483647。
整数64
这是FCL类型。
在C#中,long映射到Int64。
它是一个值类型,代表System.Int64结构。
它经过签名,占用64位。
它的最小值为–9,223,372,036,854,775,808,最大值为9,223,372,036,854,775,807。
Int64
数据类型,而在C#中可以使用L
或l
后缀while Int16
或Int32
不使用后缀来表示。
根据Jeffrey Richter(.NET框架开发的撰稿人之一)的书“通过C#进行CLR”所述:
int是C#编译器允许的原始类型,而Int32是Framework类库类型(可在遵循CLS的语言中使用)。实际上,在编译期间int会转换为Int32。
也,
在C#中,long映射到System.Int64,但是在另一种编程语言中,long可以映射到Int16或Int32。实际上,C ++ / CLI确实将Int32视为长期使用。
实际上,大多数(.NET)语言甚至都不会将其视为关键字,也不会编译使用该关键字的代码。
我已经见过这位作者,以及许多有关.NET的标准文献,它们主要针对此类互操作性,而更喜欢FCL类型(即Int32)而不是特定于语言的原始类型(即int)。
关于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!
short
为适合它们在数组中的位置,而第二个文字1保留为normal int
。 (int)1
不被认为是等于(short)1
,(short)2
,(short)3
,因此,结果是-1。
Array.IndexOf(new Int16(){1,2,3}, 1S)
Array.IndexOf(new Int32(){1,2,3}, 1I)
Array.IndexOf(new Int64(){1,2,3}, 1L)
所有工作均按预期进行。
Object[],Object
过载。C#会在需要时隐式将int
a 升高到a long
(也将a升高short
到int
or long
),但不会隐式地使用object
重载将其降级。当提供统一类型时,With Option Strict On
或Off
VB将仅使用类型化的重载,否则将使用object
重载。
for Array.IndexOf comparisons, only trust Int32!
是错误的。如果将最终1
参数强制转换为相应的Array类型,则它将按预期工作。
编辑:对于C#来说,这不是真的,我回答这个问题时错过了一个标签-如果还有一个特定于C#的答案,请改为投票!
它们都代表大小不同的整数。
但是,差别很小。
int16,int32和int64均具有固定大小。
一个int的大小取决于您要编译的体系结构-C规范仅将一个int定义为大于或等于一个short,尽管实际上这是您要定位的处理器的宽度,大概是 32位,但是您应该知道可能不是。
int
并且int32
是相同的(32位整数)int16
是short int(2个字节或16位)int64
是长数据类型(8个字节或64位)int
是的别名Int32
,因此始终保证为32位。
int16
以节省内存资源不是更好的选择,而不是简单地使用int
?