[英]Integer.MIN_VALUE divide by -1
if (dividend == Integer.MIN_VALUE && divisor == -1) {
return Integer.MAX_VALUE;
}
在不使用乘法,除法和mod運算符的情況下除以兩個整數。
如果溢出,則返回2147483647
public int divide(int dividend, int divisor) {
if(divisor == 0){
return dividend > 0 ? Integer.MAX_VALUE : Integer.MIN_VALUE;
}
if(dividend == 0){
return 0;
}
if (dividend == Integer.MIN_VALUE && divisor == -1) {
return Integer.MAX_VALUE;
}
boolean isNeg = (dividend > 0 && divisor < 0) || (dividend < 0 && divisor > 0);
Long up = Math.abs((long) dividend);
Long down = Math.abs((long) divisor);
int res = 0;
while(up >= down){
int shift = 0;
while(up >= (down << shift)){
shift++;
}
up -= down << (shift - 1);
res += 1 << (shift - 1);
}
return isNeg ? -res : res;
}
因為, Integer.MAX_VALUE
和Integer.MIN_VALUE
的絕對值不相等。
Integer.MAX_VALUE
是2147483647
Integer.MIN_VALUE
是-2147483648
如果將Integer.MIN_VALUE
除以-1
,則該值將溢出( 2147483648 > 2147483647
),因此必須對此操作進行限制。
Java使用32位來存儲int
。
max int值為2 31 -1
0111 1111 1111 1111 1111 1111 1111 1111
min int值為-2 31
1000 0000 0000 0000 0000 0000 0000 0000
換句話說,int沒有足夠大的值來存儲2 31 ( -Integer.MIN_VALUE
)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.