Java 为什么我得到-2147483648和-1';s乘法,负数,即-2147483648,应为+;2147483648

Java 为什么我得到-2147483648和-1';s乘法,负数,即-2147483648,应为+;2147483648,java,integer,Java,Integer,这是我在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*diviso

这是我在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);
公共静态整数商(整数被除数,整数除数){
int n=Math.abs(除数),count=0,ans=Integer.MAX_值-1;
if(数学abs(被除数)==1&&Math.abs(除数)==1){
回报红利*除数;
}
else if(数学abs(除数)==1){

如果(dividend0和&divisor我认为这是一个整数溢出。如图所示,长整数的最大值是
2147483647
,并且没有
2147483648
这样的
int
值,因此在添加
1
时,它会转到
-2147483648
作为下一个整数。您可以尝试
Long
类型来解决这个问题问题是,在Java中,它的最大值是
9223372036854775807
(太多了).

Java中的长整数最大值为
2147483648
,最小值为负
2147483648
。我不知道为什么会出现这个问题,但这可能会有帮助。@Yan,不是真的。@fluffy,检查这个链接@Yan,
int
最大值正好是
+2“u 483_647
,而不是
+2147483648
它根本不能用32位整数保存。@fluffy,对不起,这只是一个输入错误。