int和System的区别是什么?Int16、系统。Int32和System。Int64,而不是它们的大小?


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


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

Int16: 2字节 Int32和int: 4字节 Int64: 8字节

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


Int和int32是同一个(32位整数) Int16是短int(2字节或16位) 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在他的回答中所述:

int and Int32 are indeed synonymous; int will be a little more familiar looking, Int32 makes the 32-bitness more explicit to those reading your code. I would be inclined to use int where I just need 'an integer', Int32 where the size is important (cryptographic code, structures) so future maintainers will know it's safe to enlarge an int if appropriate, but should take care changing Int32 variables in the same way. The resulting code will be identical: the difference is purely one of readability or code appearance.


Int=Int32——>原始长类型 Int16——>原始int Int64—>在64位系统之后提供新的数据类型 "int"仅用于向后兼容。我们应该使用新的int类型使我们的程序更精确。 --------------- 我注意到的另一件事是,没有类似于Int16、Int32和Int64的名为Int的类。所有有用的函数,如TryParse for integer,都来自Int32.TryParse。


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

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

同时,

在c#中,长映射到系统。Int64,但是在不同的编程中 语言,long可以映射到Int16或Int32。事实上,c++ /CLI做到了 将long处理为Int32。 事实上,大多数(.NET)语言甚至不会将long视为关键字,也不会 编译使用它的代码。

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


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

如果你运行这个查询… 数组中。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#中,short被映射为Int16。

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

它带符号,长度为16位。

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

Int32

这是整柜型。

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

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

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

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

Int64

这是整柜型。

在c#中,long被映射到Int64。

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

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

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


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

1)创建enum时不能使用Int32

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 beers/bytes = 16bit = 2^16 = 65536 = 65536/2 = -32768 to 32767 Int32:- 4 beers/bytes = 32 bit = 2^32 = 4294967296 = 4294967296/2 = -2147483648到2147483647 Int64:- 8 beers/bytes = 64 bit = 2^64 = 18446744073709551616 = 18446744073709551616/2 = -9223372036854775808到9223372036854775807

总之,你不能在int16中存储超过32767的值,超过 int32中的值大于9223372036854775807的值 int64。

为了理解上面的计算,你可以看看这个视频int16 vs int32 vs int64


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