是什么区别int,System.Int16,System.Int32和System.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在回答中所述:
int和Int32确实的代名词;int将会更加熟悉,Int32使32位读取代码更加明确.我倾向于使用int,我只需要'整数',Int32其中大小很重要(加密代码,结构),所以未来的维护者会知道int如果合适的话放大一个是安全的 ,但是应该注意Int32以同样的方式改变变量.结果代码将是相同的:差异纯粹是可读性或代码外观之一.
Jar*_*Par 113
这里唯一真正的区别是尺寸.这里的所有int类型都是有符号整数值,它们的大小各不相同
Int16:2个字节Int32和int:4个字节Int64 :8个字节Int64和其他人之间有一个小的区别.在32位平台上,对Int64存储位置的分配不保证是原子的.所有其他类型都有保证.
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
有关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!
编辑:这对C#来说并不完全正确,这是我在回答这个问题时错过的标签 - 如果有更多C#特定的答案,请投票支持!
它们都代表不同大小的整数.
然而,这是一个非常微小的差异.
int16,int32和int64都有固定的大小.
int的大小取决于您正在编译的体系结构 - C规范只将int定义为大于或等于short,但实际上它是您要定位的处理器的宽度,可能是 32位,但您应该知道它可能不是.
int并且int32是一个相同的(32位整数)int16 是短整数(2个字节或16位)int64 是长数据类型(8字节或64位)它们确实是同义词,但是我发现它们之间的细微差别,
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