给定两个整数,被除数 dividend 和除数 divisor。将两数相除,要求不使用乘法、除法和 mod 运算符。
返回被除数 dividend 除以除数 divisor 得到的商。
利用<< 左位移,相当于乘以2,>>右位移,相当于除以2
说明:
被除数和除数均为 32 位有符号整数。
除数不为 0。
假设我们的环境只能存储 32 位有符号整数,其数值范围是 [−231, 231 − 1]。本题中,如果除法结果溢出,则返回 231 − 1。
class Solution {
fun divide(dividend: Long, divisor: Long): Long {
if (divisor == 0L) {
return 0
}
val sign = if (dividend.xor(divisor).ushr(31) > 0) -1 else 1
var result = 0L
var m = Math.abs(dividend)
var n = Math.abs(divisor)
if (n == 1L) {
return sign * m
}
while (m >= n) {
var t = n
var p = 1
while (m >= t shl 1) {
p = p shl 1
t = t shl 1
}
m -= t
result += p
}
return sign * result
}}
java中Math.abs(-2147483648)的返回值应该是什么?
https://www.jianshu.com/p/0f7c7a48ce18