C#中积分类型的最小值和最大值
题
使用计算器计算积分类型的最小值的数学公式是什么?我知道您可以使用integer.max或integer.min等,或在MSDN上查找它,但是我想知道如何计算它。
解决方案
对于未签名类型:
- 最小值= 0
- 最大值=(2 **(位数))-1
因此对于 UInt32
:
Min value = 0
Max value = (2 ** 32) - 1
= 4294967296 - 1
= 4294967295
对于签名类型:
- 最小值= 0-(2 **(位数-1))
- 最大值=(2 **(位数-1)) - 1
因此对于 Int32
:
Min value = 0 - (2 ** (32 - 1))
= 0 - (2 ** 31)
= 0 - 2147483648
= -2147483648
Max value = (2 ** (32 - 1)) - 1
= (2 ** 31) - 1
= 2147483648 - 1
= 2147483647
其他提示
在此示例中,我使用的是32bits签名的整数。 31位用于创建2^31可能性的值。由于必须包括零,因此您必须减去一个。
2^31-1
当负数时,不必包括零,因此您将获得完整的范围。
-2^31
如果一个未签名的整数,则最大是 2^32-1
, 和最小 0
.
您需要知道该类型有多少位以及是否签名。
例如,一个 int
在C#中为32位,已签名。这意味着有31位表示数字(1位用于确定负面或后期)。所以你会计算231 并减去一个是2147483647(这是Integer.maxValue返回)。
相似a byte
是8位,未签名,因此最大值为28 -1或255。
您的问题答案的一个示例
int签名:
Min=(1 << ((sizeof(int) * 8) - 1));
Max=~(1 << ((sizeof(int) * 8) - 1));
还
Min=~(int)((~((uint)0))>>1);
Max=(int)((~((uint)0))>>1);
int unsigned:
Min=0;
Max=~((uint)0);
整数变量的最小值是从使用的钻头数量(通常为2个,即2bits,4bits,8bits)的数量。 C#中的INT使用32位,因此,最大值为4,294,967,295-因为这是最大值32位数据可以代表的 - 无论如何我的理解也是如此。
如果您的计算器具有小数到二进制转换(DEC-HEX也可以工作),请尝试转换INT32.MAXVALUE,看看是否发现图案...
我相信您会发现这很有帮助:
整数(计算机科学) @ Wikipedia
不隶属于 StackOverflow