C# int、Int16、Int32和Int64之间的区别是什么?
C# int、Int16、Int32和Int64之间的区别是什么?,c#,.net,C#,.net,int、System.Int16、System.Int32和System.Int64之间除了尺寸之外还有什么区别。类型之间唯一的区别是它们的大小(以及它们可以表示的值的范围)。这里唯一真正的区别是大小。这里所有的int类型都是大小不同的有符号整数值 Int16:2字节 Int32和int:4字节 Int64:8字节 Int64和其他部分之间有一个小的区别。在32位平台上,对Int64存储位置的分配不保证是原子的。对于所有其他类型,它都是有保证的 int和int32是一个相同的(32位整数)
int
、System.Int16
、System.Int32
和System.Int64
之间除了尺寸之外还有什么区别。类型之间唯一的区别是它们的大小(以及它们可以表示的值的范围)。这里唯一真正的区别是大小。这里所有的int类型都是大小不同的有符号整数值
:2字节Int16
和Int32
:4字节int
:8字节Int64
Int64
和其他部分之间有一个小的区别。在32位平台上,对Int64
存储位置的分配不保证是原子的。对于所有其他类型,它都是有保证的
int
和int32
是一个相同的(32位整数)int16
是短int(2字节或16位)int64
是长数据类型(8字节或64位)编辑:对于C#来说,情况并非如此,我在回答这个问题时遗漏了一个标签——如果有更具体的C#答案,请投赞成票
它们都表示大小不同的整数 然而,有一个非常非常微小的区别 int16、int32和int64都有固定的大小
int的大小取决于您编译的体系结构-C规范只将int定义为大于或等于一个短值,但实际上它是您目标处理器的宽度,可能是32位,但您应该知道它可能不是。每种类型的整数都有不同的存储容量范围
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
确实是同义词<代码>整数会多一点
熟悉的外观,Int32
使32位对那些
阅读你的代码。我倾向于在我需要的地方使用int
“一个整数,Int32
,其中大小很重要(密码,
因此,未来的维护人员将知道扩大
int
如果合适,但应注意更改Int32
变量
以同样的方式
生成的代码将是相同的:差异纯粹是其中之一
可读性或代码外观
Int=Int32-->原始长类型
Int16-->原始整数
Int64-->新数据类型在64位系统之后可用
“int”仅用于向后兼容。我们应该真正使用新的int类型,使我们的程序更精确。
---------------
在此过程中,我还注意到没有一个类名为Int
类似于Int16、Int32和Int64。整数的所有有用函数,如TryParse
,都来自Int32.TryParse
根据Jeffrey Richter(.NET framework开发的贡献者之一)的书《通过C#实现CLR》: int是C#编译器允许的一种基本类型,而Int32是框架类库类型(适用于遵守CLS的语言)。事实上,int在编译期间转换为Int32 而且 在C#中,long映射到System.Int64,但在不同的编程中 语言,long可以映射到Int16或Int32。事实上,C++/CLI确实如此 长按Int32处理 事实上,大多数(.NET)语言甚至不会将long视为关键字,也不会 编译使用它的代码
我见过这位作者,以及许多关于.NET的标准文献,他们更喜欢FCL类型(即Int32)而不是特定于语言的基元类型(即int),主要是关于这种互操作性问题。关于16、32和64类型的一个非常重要的注意事项: 如果运行此查询。。。 Array.IndexOf(新的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#: 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 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位
它的最小值为9223372036854775808,最大值为9223372036854775807。它们确实是同义词,但我发现它们之间的差别很小 1) 创建
enum
enum Test : Int32
{ XXX = 1 // gives you compilation error
}
enum Test : int
{ XXX = 1 // Works fine
}
2)
Int32
属于系统声明。如果使用.System删除,则会出现编译错误,但在int
的情况下不会出现编译错误,因为它们会告诉整数变量中可以存储的大小。要记住大小,您可以考虑:-)2啤酒(2字节)、4啤酒(4字节)或8啤酒(8字节)
- Int16:-2啤酒/字节=16位=2^16=65
enum Test : Int32
{ XXX = 1 // gives you compilation error
}
enum Test : int
{ XXX = 1 // Works fine
}