在这个网站上注册账户时,安全“挑战”问题是一个32位有符号整数的最小值是多少。 我们可以假设他们指的是能够存储最大数字为2,147,483,647的典型32位整数。但是,当我尝试使用-2147483647时,它说我回答错误。我尝试了几种变化,例如-2,147,483,647,但都不起作用...我是否误解了问题,还是网站出了问题?
最常用的整数大小为32位。最后一位用于区分正数和负数。如果最后一位未设置,则该数字为正数。因此,最大的正数是0x7FFFFFFF
=(1<<31)-1
=2147483647
(最后一位未设置)。
对于负数,广泛使用二进制补码表示法。您可以通过反转所有位并加1来识别正数的对应项。因此,最大整数的对应项为0x80000001
,但它不是最小数字。
在二进制补码表示法中,最小数字为0x80000000
=-2147483648
。
关于这个数字有趣的事实是,它等于自己的补码,即反转所有位的结果为0x7FFFFFFF
,加1等于0x80000000
,与原始数字相等。
更多关于二进制补码表示法的信息,请参见维基百科。
有符号的32位整数最小值为-2,147,483,648
System.out.printf("%d", Integer.MIN_VALUE)
的输出结果是:-2147483648
。 - Zack Newsham