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


当前回答

根据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类型都是带符号的整型值,大小不同

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

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

它们告诉我们什么大小可以存储在一个整数变量中。为了记住大小,你可以这样想:-)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

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


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

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

Int16、int32和int64的大小都是固定的。

int型的大小取决于你所编译的体系结构——C规范只将int型定义为大于或等于short型,但实际上它是你的目标处理器的宽度,可能是32位,但你应该知道它可能不是。

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