int, Int16, Int32和Int64之间的区别是什么?

除了大小不同,intSystem.Int16System.Int32System.Int64之间有什么区别?

642456 次浏览

没什么。类型之间的唯一区别是它们的大小(因此,它们可以表示的值范围)。

唯一真正的区别是大小。这里所有的int类型都是带符号的整型值,大小不同

  • Int16: 2字节
  • Int32int: 4个字节
  • Int64: 8字节

Int64和其余的有一个小区别。在32位平台上,对Int64存储位置的赋值不保证是原子的。对于所有其他类型都是保证的。

  1. intint32是同一个(32位整数)
  2. int16是短int(2字节或16位)
  3. int64是长数据类型(8字节或64位)

编辑:这对c#来说并不完全正确,我在回答这个问题时漏掉了一个标签——如果有更具体的c#答案,请投票给它!


它们都代表不同大小的整数。

然而,有一个非常非常微小的区别。

int16, int32和int64的大小都是固定

int型的大小取决于你正在编译的体系结构——C规范只将int型定义为大于或等于short型,但实际上它是你目标处理器的宽度,即可能 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在他的回答中所述:

intInt32是同义词;int会稍微多一点 虽然看起来很熟悉,但Int32使32位更显式 阅读代码。我倾向于在需要的地方使用int `一个整数',Int32,其中大小是重要的(加密代码, 结构),这样以后的维护者就会知道扩展的安全性 int如果合适,但应该注意改变Int32变量

.

. 结果代码将是相同的:差异纯粹是一个

.可读性或代码外观

Int=Int32——>原始长类型

Int16——>原始int

Int64——>在64位系统之后,新的数据类型可用

"int"仅用于向后兼容。我们应该使用新的int类型使我们的程序更精确。

---------------

我注意到一路上没有名为Int的类类似于Int16, Int32和Int64。所有有用的函数,如TryParse for integer,都来自Int32.TryParse

< p >

根据Jeffrey Richter(.NET框架开发的贡献者之一)的书《CLR via c#》:

int是c#编译器允许的基本类型,而Int32是框架类库类型(适用于所有遵守CLS的语言)。事实上,int在编译时转换为Int32。

同时,

在c#中,长映射到系统。Int64,但是在不同的编程中 语言,long可以映射到Int16或Int32。事实上,c++ /CLI做到了

事实上,大多数(.NET)语言甚至不会将long视为关键字,也不会

我曾见过这位作者,以及许多关于. net的标准文献更喜欢FCL类型(例如。, Int32)到特定于语言的原语类型(即:, int),主要关注互操作性问题。

关于16、32和64类型有一个非常重要的注意事项:

if you run this query… 数组中。IndexOf(new Int16[]{1,2,3}, 1)

. IndexOf(new Int16[]{1,2,3}, 1

你应该得到0(0),因为你问…是1在1 2或3的数组中。 如果你得到-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)

我的观点是,对于数组。IndexOf比较,只信任Int32!

int

它是c#中定义的基本数据类型。

它被映射到FCL类型的Int32。

它是一个值类型,表示System。Int32结构。

它是有符号的,长度为32位。

它具有最小值-2147483648和最大值+2147483647。

Int16

这是整柜型。

在c#中,被映射到Int16。

它是一个值类型,表示System。Int16结构。

它带符号,长度为16位。

最小值为-32768,最大值为+32767。

Int32

这是整柜型。

在c#中,int被映射到Int32。

它是一个值类型,表示System。Int32结构。

它是有符号的,长度为32位。

它具有最小值-2147483648和最大值+2147483647。

Int64

这是整柜型。

在c#中,被映射到Int64。

它是一个值类型,表示System。Int64结构。

它是有符号的,长度为64位。

它的最小值为-9,223,372,036,854,775,808,最大值为9,223,372,036,854,775,807。

他们确实是同义的,但是我发现他们之间的小区别,

1)创建__abc1时不能使用Int32

enum Test : Int32
{ XXX = 1   // gives you compilation error
}


enum Test : int
{ XXX = 1   // Works fine
}

2) Int32属于系统声明。如果你删除了using.System,你会得到编译错误,但不会在int的情况下

它们告诉我们什么大小可以存储在一个整数变量中。为了记住大小,你可以这样想:-)2个啤酒(2字节),4个啤酒(4字节)或8个啤酒(8字节)。

  • Int16:-2 beers/bytes = 16bit = 2^16 = 65536 = 65536/2 = -32768 to 32767

  • Int32:- 4 beers/bytes = 32 bit = 2^32 = 4294967296 = 4294967296/2 = -2147483648 to 2147483647

  • Int64:- 8 beer/ bytes = 64bit = 2^64 = 18446744073709551616 = 18446744073709551616 /2 = -9223372036854775808到9223372036854775807

总之,你可以在int16中存储超过32767个值,超过 int32中的值大于9223372036854775807的值 int64 . < / p >

要理解上面的计算,你可以看看这个视频Int16 vs int32 vs int64

int16vsint32vsint64

以上人的回答基本正确。Int, int16, int32…根据数据存储容量的不同而有所不同。但这就是为什么编译器必须处理这些问题——它是为了解决潜在的2038年问题。点击链接了解更多信息。 https://en.wikipedia.org/wiki/Year_2038_problem < / p >