32位有符号整数的最小值是多少?

22
在这个网站上注册账户时,安全“挑战”问题是一个32位有符号整数的最小值是多少。 我们可以假设他们指的是能够存储最大数字为2,147,483,647的典型32位整数。但是,当我尝试使用-2147483647时,它说我回答错误。我尝试了几种变化,例如-2,147,483,647,但都不起作用...我是否误解了问题,还是网站出了问题?

你尝试过 -2147483648 或者甚至是 0 吗? - user1864610
2
你在输入数字之前仔细阅读了问题吗?我注意到它在要求最大值和最小值之间反复跳动(刷新几次并观察其变化)。确保你知道哪一个!;) - lurker
2个回答

41

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

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

在二进制补码表示法中,最小数字为0x80000000=-2147483648。 关于这个数字有趣的事实是,它等于自己的补码,即反转所有位的结果为0x7FFFFFFF,加1等于0x80000000,与原始数字相等。

更多关于二进制补码表示法的信息,请参见维基百科


9

有符号的32位整数最小值为-2,147,483,648


顺便提一下,当我访问那个网站时,它会要求我输入最大值?你有可能读错了吗?或者每次它都在问不同的问题? - Zack Newsham
我注意到它每隔几次刷新就会改变。 - lurker
我在回答你的问题时添加了一张图片。 - java
1
表单肯定有问题,它接受了正确的最大值,我在Java中进行了双重检查(以防像格式化这样的愚蠢错误),而这一行代码:System.out.printf("%d", Integer.MIN_VALUE) 的输出结果是:-2147483648 - Zack Newsham
我已经让它接受了最大值……奇怪的是它不接受最小值。 - java
给他们发封邮件告诉他们表单已经损坏 - 我尝试过了,但你必须创建一个帐户并登录 - 对我来说太像苦工了! - Zack Newsham

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接