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


当前回答

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

其他回答

每种类型的整数具有不同的存储容量范围

   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.

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

关于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!

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

1)创建enum时不能使用Int32

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

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

2) Int32属于System声明。如果你不使用。在系统中,你会得到编译错误,但在int中不会

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