【发布时间】:2010-05-06 09:26:48
【问题描述】:
使用计算器计算整数类型的 MIN 和 MAX 值的数学公式是什么?我知道您可以使用 Integer.Max 或 Integer.Min 等或在 msdn 上查找它,但我想知道如何计算它。
【问题讨论】:
标签: c# math types int32 integral
使用计算器计算整数类型的 MIN 和 MAX 值的数学公式是什么?我知道您可以使用 Integer.Max 或 Integer.Min 等或在 msdn 上查找它,但我想知道如何计算它。
【问题讨论】:
标签: c# math types int32 integral
对于无符号类型:
所以,对于UInt32:
Min value = 0
Max value = (2 ** 32) - 1
= 4294967296 - 1
= 4294967295
对于有符号类型:
所以,对于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
【讨论】:
我在这个例子中使用了一个 32 位的有符号整数。 31 位用于创建 2^31 种可能性的值。由于必须包含零,因此您必须减去一。
2^31-1
如果为负数,则不必包含零,因此您可以获得完整的范围。
-2^31
如果是无符号整数,最大值只是2^32-1,最小值是0。
【讨论】:
你需要知道该类型有多少位以及是否有符号。
例如,int 在 C# 中是 32 位并且是有符号的。这意味着有 31 位来表示数字(1 位用于确定负数或正数)。因此,您将计算 231 并减去 2147483647(即 Integer.MaxValue 返回的值)。
类似byte 是 8 位且无符号,因此最大值为 28 -1 或 255。
【讨论】:
如果您的计算器有十进制到二进制的转换(十进制到十六进制也可以),请尝试转换 Int32.MaxValue 并查看您是否发现了模式...
【讨论】:
您的问题答案示例
整数签名:
Min=(1 << ((sizeof(int) * 8) - 1));
Max=~(1 << ((sizeof(int) * 8) - 1));
还有
Min=~(int)((~((uint)0))>>1);
Max=(int)((~((uint)0))>>1);
int 无符号:
Min=0;
Max=~((uint)0);
【讨论】:
Integer 变量的 Min/Max 值由使用的位数得出(通常为 2 的幂,即 2bits、4bits、8bits)。 C# 中的 INT 使用 32 位,因此可以具有 4,294,967,295 的 MAX 值 - 因为这是 32 位数据可以表示的最大值 - 这是我的理解,无论如何。
【讨论】:
我相信你会发现这很有帮助:
Integer (Computer Science) @ Wikipedia
【讨论】: