【问题标题】:What is the minimum value of a 32-bit signed integer?32 位有符号整数的最小值是多少?
【发布时间】:2013-10-05 17:26:06
【问题描述】:

32 位有符号整数的最小值是多少,恰好是在 [本网站] 上创建帐户的安全“挑战”问题(编辑:链接现在是恶意软件)(不要判断我'我只是好奇和无聊)。

我以为他们在谈论一个典型的 32 位 int,它可以存储像 2,147,483,647 这样大的数字。但是当我尝试-2147483647 时,它说我的问题错了。我尝试了几种变体,例如-2,147,483,647,但没有任何效果......

是我误解了问题还是网站有问题?

PS 我也按照建议尝试了 -2,147,483,648

这是一张图片

【问题讨论】:

  • 你试过-2147483648,甚至可能是0
  • 您在输入号码之前是否仔细阅读了问题?我注意到它在要求最大值和要求最小值之间反弹(点击刷新几次并观察它的变化)。确保你知道是哪一个! ;)

标签: int 32-bit signed minimum


【解决方案1】:

最常用的整数大小是 32 位。最后一位用于区分正数和负数。如果最后一位未设置,则该数字为正数。因此,最大正数为0x7FFFFFFF = (1<<31)-1=2147483647(最后一位未设置)。

对于负数,二进制补码表示法被广泛使用。您可以通过将正数的所有位取反并加 1 来识别正数的对应物。因此,最大整数的对应物是 0x80000001,但它不是最小数。

二进制补码表示法中的最小数字是0x80000000 = -2147483648。 关于这个数字的有趣事实是它等于它自己的补码,即将所有位取反得到0x7FFFFFFF,加1得到0x80000000,等于原始数字。

wikipedia 中了解关于二进制补码表示法的更多信息。

【讨论】:

    【解决方案2】:

    带符号的 32 位整数可以下降到 -2,147,483,648

    【讨论】:

    • 顺便说一句,当我去那个网站时,它问我最大?有没有可能你读错了/它每次都问一个不同的问题?
    • 我注意到它每隔几次刷新就会改变一次。
    • 我添加了一张图片来回答你的问题
    • 表格一定有问题,它接受正确的最大值,我在 Java 中再次检查(以防它像格式化一样愚蠢),这一行:System.out.printf("%d", Integer.MIN_VALUE) 给出:-2147483648
    • 我让它接受最大值...奇怪的是它不适用于最小值。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-04-06
    • 2019-11-09
    • 2015-10-15
    • 1970-01-01
    • 2011-11-13
    • 2021-08-19
    • 2011-03-15
    相关资源
    最近更新 更多