当前位置: 首页 > 面试题库 >

Java Integers Min_Value负数然后比较

慕阳伯
2023-03-14
问题内容

明天我要进行考试,但我听不懂书中的解释,感谢您的帮助:

public class TestClass{
      public static void main(String[] args) throws Exception{
            int a = Integer.MIN_VALUE;
            int b = -a;
            System.out.println( a+ "   "+b);
      }
}

输出: -2147483648 -2147483648

为什么这会打印两个大小相同的负数而不是正负数?


问题答案:

由于无声整数溢出:Integer.MIN_VALUEis -2^31Integer.MAX_VALUEis
2^31-1,因此-Integer.MIN_VALUEis 2^31,即is Integer.MAX_VALUE + 1,根据定义,它对于整数而言太大。因此它溢出并变成Integer.MIN_VALUE

您还可以检查:

System.out.println(Integer.MAX_VALUE + 1);

打印相同的东西。

从技术上讲,结果由Java语言规范#15.18.2定义:

如果整数加法溢出,则结果是数学和的低阶位,以某种足够大的二进制补码格式表示。如果发生溢出,则结果的符号与两个操作数值的数学和的符号不同。



 类似资料:
  • 试图对这个问题中的各个数字求和。然而,当涉及负数时,函数就会分崩离析。这是因为当您使用toString()时,会将负号转换为NewStr中的值。例如,在本例中,newstr[0]==='-'。不管怎么说都是为了解决这个问题?最好使用Number()函数

  • 问题内容: 我正在尝试使用Java8按名称对员工进行排序,然后按年龄进行排序,我在下面创建了该代码,但它给了我一个编译器错误 但是如果我明确指定类型,它就可以工作 或通过创建两个s和链 我已经在左侧指定了类型,但是为什么自动类型推断没有找到正确的类型并期望明确指定。 有人可以澄清吗? 这是代码 输出 问题答案: Java需要知道所有变量的类型。在许多lambda中,它可以推断类型,但是在您的第一个

  • 我是Java新手,我正在尝试使用Lambda表达式和比较器。我有一个具有其他getter和toString方法的公共类人员: 现在我想对一个Person[]列表进行排序,首先按String(降序)进行比较,然后按年龄(升序)进行比较,然后按计算机数量(降序)进行比较,最后按Salary(升序)进行比较。我无法实现可比较,因为如果我重写compareTo方法,它应该是升序或降序,我需要两者。我想知道

  • 问题内容: 我想结合两个查询 然后计算百分比(将第二个查询除以第一个查询)。我想在一个查询中实现这一目标。到目前为止我尝试过的是: 我得到的是: 我想要的是: 问题答案: 这应该给您您想要的: 编辑:没注意到这是为Access。我不知道Access中是否可用,因此您可能需要使用一个等效函数来确保整数不会简单地产生1或0。Access可能会自动将除法转换为小数,但在SQL Server则不然。

  • 我有一些代码,每当它通过我的循环,就增加一个字节8位。一切都如我所料,直到我达到120,然后我的数字突然变成负数。 法典: 输出: 0 8 16 24 32 40 48 56 64 72 80 88 96 104 112 120-128-120-112-104-96-88-80-72-64-56-48-40-32-24-16-8 我想看到的: 0 8 16 24 32 40 48 56 64 72

  • 问题内容: 我需要查询一个表并选择4列的值中的3个。我需要比较第三列和第四列的值,然后选择较大的值。 例如: 我需要退货: 我一直在尝试使用IF / ELSE,但是我似乎无法正确使用语法 问题答案: 在T-SQL中, IF 命令用于程序控制。例如: 在SQL语句中,您需要 CASE 。