代码之家  ›  专栏  ›  技术社区  ›  Jonathan

c中积分型的最小值和最大值#

  •  1
  • Jonathan  · 技术社区  · 14 年前

    使用计算器计算积分类型的最小值和最大值的数学公式是什么?我知道你可以使用integer.max或integer.min等,或者在msdn上查找,但是我想知道如何计算它。

    8 回复  |  直到 14 年前
        1
  •  12
  •   LukeH    14 年前

    对于无符号类型:

    • 最小值=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
  •  3
  •   Dykam    14 年前

    我在这个例子中使用了一个32位有符号整数。 31位用于产生2^31种可能性的值。因为必须包含零,所以必须减去一。

    2^31-1
    

    当为负数时,不必包含零,这样就得到了完整的范围。

    -2^31
    

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

        3
  •  1
  •   Paolo    14 年前

    您需要知道该类型有多少位,以及它是否已签名。

    例如,一个 int 在C中是32位,并且有符号。这意味着有31位代表数字(1位用于确定负数或正数)。所以你可以算出2 三十一 再减去2147483647(integer.maxvalue返回的值)。

    Similary A byte 是8位,没有符号,所以最大值是2 - 1或255。

        4
  •  1
  •   Betamoo    14 年前

    你的问题答案的一个例子

    In签名:

    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);
    
        5
  •  0
  •   Seidr    14 年前

    整数变量的最小/最大值是从使用的位数(通常为2,即2位,4位,8位的幂)中导出的。c中的int使用32位,因此最大值可以是4294967295,因为这是32位数据可以表示的最大值,这也是我的理解。

        7
  •  0
  •   Hans Kesting    14 年前

    如果你的计算器有一个十进制到二进制的转换(十进制到十六进制也可以),试着转换int32.maxvalue看看你是否发现了模式…

        8
  •  0
  •   Rubys    14 年前

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