当前位置: 首页 > 知识库问答 >
问题:

为什么我得到的是-2147483648和-1的乘法,负数是-2147483648,而不是+2147483648[重复]

司寇阳曦
2023-03-14

这是我在LeetCode中为这个问题编写的代码片段。

 public static int quotient(int dividend,int divisor){
        int n=Math.abs(divisor),count=0,ans=Integer.MAX_VALUE-1;
        if(Math.abs(dividend)==1 && Math.abs(divisor)==1){
            return dividend*divisor;
        }
        else if(Math.abs(divisor)==1){
            if(dividend<0 && divisor<0)
                return Math.abs(dividend);
            return dividend*divisor;
        }
        else if(dividend==0){
            return 0;
        }
        else {
            while (true) {
                if (n > Math.abs(dividend)) {
                    ans = count;
                    break;
                } else if (n == Math.abs(dividend)) {
                    ans = count + 1;
                    break;
                } else {
                    n += Math.abs(divisor);
                    count++;
                }
            }
        }
        if((dividend<0 && divisor>0) || (dividend>0 && divisor<0))
              ans*=-1;
        return ans;
    }
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int dividend=sc.nextInt();
        int divisor = sc.nextInt();
        int ans=quotient(dividend,divisor);
        System.out.println(ans);

}

为什么会这样?请解释一下。

共有1个答案

郤玉书
2023-03-14

我认为这是一个整数溢出。如这里所示,长整数的最大值是2147483647,并且没有2147483648这样的int值,所以当添加1时,它将作为下一个整数-2147483648。您可以尝试long类型来解决这个问题,它的最大值在Java中是9223372036854775807(这是很多)。

 类似资料:
  • -2147483648是32位整数类型的最小整数,但它似乎会在

  • Android 4.4发布后不久,我的代码从2.2开始就一直正常工作,但突然出了问题。 我的代码将在音乐数据库中查询给定的音乐文件。在查询中返回路径,然后将该路径传递到MediaPlayer。 代码: 我最终在我的 LogCat 中得到了无用的错误(1, -2147483648) 消息。 我也尝试过更换 具有 但这会在新的 FileInputStream(...) 上生成一个 FileNotFou

  • 我与Wildfly和OpenJPA合作。我有一个乐观锁例外的情况。 我得到的错误消息是: 00:08:29373警告[com.arjuna.ats.arjuna](默认任务-39)arjuna01225:TwoPhaseCoordinator。beforeCompletion-SynchronizationImple失败 :org.apache.openjpa.persistence.乐观锁定异常

  • 我现在有一个helloworld项目根据这个链接,我做了它的。帽子 文件成功。我有“DE-ABCM_TB”读卡器和SAM卡。 我的小程序AID是 我可以在卡片上选择我的小程序。(我通过"DualCard"发送SELECT APDU命令 2.8版“/pcsc选项卡)。我现在必须在发送时接收十六进制格式的hello 。但我收到6C0B!为什么我会得到这样的回应 我如何解决这个问题?我搜索了一下,但没有

  • 当我运行(Windows 7命令行)时: C:\rest-app\src\main\java\com\mycompany\app\test>java org.testng.testng testng.xml Suite1运行的测试总数:0,失败:0,跳过:0 ================================================== 此时我的testng.xml文件如下所