【问题标题】:Min and Max value of integral type in C#C#中整数类型的最小值和最大值
【发布时间】:2010-05-06 09:26:48
【问题描述】:

使用计算器计算整数类型的 MIN 和 MAX 值的数学公式是什么?我知道您可以使用 Integer.Max 或 Integer.Min 等或在 msdn 上查找它,但我想知道如何计算它。

【问题讨论】:

    标签: c# math types int32 integral


    【解决方案1】:

    对于无符号类型:

    • 最小值 = 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
    

    【讨论】:

    • 感谢您为回答我非常简单的问题所付出的努力!
    • 简单可以很复杂。
    【解决方案2】:

    我在这个例子中使用了一个 32 位的有符号整数。 31 位用于创建 2^31 种可能性的值。由于必须包含零,因此您必须减去一。

    2^31-1
    

    如果为负数,则不必包含零,因此您可以获得完整的范围。

    -2^31
    

    如果是无符号整数,最大值只是2^32-1,最小值是0

    【讨论】:

      【解决方案3】:

      你需要知道该类型有多少位以及是否有符号。

      例如,int 在 C# 中是 32 位并且是有符号的。这意味着有 31 位来表示数字(1 位用于确定负数或正数)。因此,您将计算 231 并减去 2147483647(即 Integer.MaxValue 返回的值)。

      类似byte 是 8 位且无符号,因此最大值为 28 -1 或 255。

      【讨论】:

        【解决方案4】:

        如果您的计算器有十进制到二进制的转换(十进制到十六进制也可以),请尝试转换 Int32.MaxValue 并查看您是否发现了模式...

        【讨论】:

          【解决方案5】:

          您的问题答案示例

          整数签名:

          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);
          

          【讨论】:

            【解决方案6】:

            Integer 变量的 Min/Max 值由使用的位数得出(通常为 2 的幂,即 2bits、4bits、8bits)。 C# 中的 INT 使用 32 位,因此可以具有 4,294,967,295 的 MAX 值 - 因为这是 32 位数据可以表示的最大值 - 这是我的理解,无论如何。

            【讨论】:

              【解决方案7】:
              【解决方案8】:

              我相信你会发现这很有帮助:
              Integer (Computer Science) @ Wikipedia

              【讨论】:

                猜你喜欢
                • 2019-01-02
                • 2011-01-04
                • 2013-06-27
                • 2011-05-29
                • 2012-11-20
                • 2012-08-09
                • 1970-01-01
                • 2011-03-27
                • 1970-01-01
                相关资源
                最近更新 更多