C# 为什么Int32.MaxValue=2147483648?

C# 为什么Int32.MaxValue=2147483648?,c#,.net,C#,.net,我想知道为什么.NET中Int32的最大可能值是2147483647,而不是2147483648。因为2英寸=2147483648 谢谢这意味着int可以有从0到2147483647的最大2147483648正值,int.Min为-2147483648,因为它不包括0它还包括正范围内的零0。因此,范围为0到2147483647,并且由于在正侧考虑了零,因此从“-1”到-2147483648朝负侧 因此,总的正、负端取相同数量的值。一个Int32存储在32位中,而不是31位,其范围的一半由负数获取

我想知道为什么.NET中Int32的最大可能值是2147483647,而不是2147483648。因为2英寸=2147483648


谢谢

这意味着
int
可以有从
0
2147483647
的最大
2147483648
正值,
int.Min
为-2147483648,因为它不包括
0

它还包括正范围内的零
0
。因此,范围为
0
2147483647
,并且由于在正侧考虑了零,因此从“-1”到
-2147483648
朝负侧


因此,总的正、负端取相同数量的值。

一个
Int32
存储在32位中,而不是31位,其范围的一半由负数获取。在剩余的范围之外,您将丢失一个值为零,留下2147483647作为最大的正数


Int32的范围为-2147483648到2147483647。

Int32的实际数据以31位存储,因为常规Int32也应包含负数,1位用作符号位,剩余的31位用作数据。但是,如果使用无符号Int32,则其中将包含完整的32位数据。

否决投票的原因?不确定,但与
sbyte
从-128变为127的原因相同。想想这个例子有一段时间,因为它更容易考虑小数字。想想在范围
[-128127]
..
2^31=100000000000000000000000000000000000
中表示了多少不同的数字,您不能将其用作符号的前导位。所以少了一个(
11111111111111111111111
),谢谢你的回复。是 啊同样的问题。为什么sbyte的最大值是127?为什么不呢?00000000 = 0 00000001 = 1 ... 01111111=128右?@VidyaBhatt 01111111二进制=127十进制。提示:最低(最右边)位为1的二进制数永远不能是偶数,它们必须是奇数。我知道int存储在32位中,最左边的位保留为符号。我不明白的是“把一个值变为零”。。怎么样?因为所有的零本身就是0。000...0000 = 0 000...0001 = 1 000...0010 = 2 ... 011…1110=1073741824 011…1111=2147483648您真的应该花些时间在维基百科上学习二进制和有符号整数表示法。通常用于有符号整数的表示称为二的补码。但是,对于8位数字,可以很快获得
2^8
或256个值。我们把其中的一半(
2^7
或128)放在零的负一边,零取一,另一半从零开始。当0取1时,剩下的是
2^7-1
正数,即127。这可以扩展到32位,我们可以得到
2^31-1
正数。其他数字表示形式也可以有-0和+0。