程序员

leetcode 29 右移操作+int 负数知识

2019-01-13  本文已影响0人  Ariana不会哭

二进制负数 正数的十进制对应。负数转换成十进制负数的法则和口诀:

image.png

异或:a^b ab状态不同时=1,相同时=0;

//my Runtime: 16 ms, faster than 97.70% of C
int divide(int dividend, int divisor) {
    if (divisor == 0 || (dividend == INT_MIN && divisor ==-1))
        return INT_MAX;
    long  m = abs(( long)dividend), n = abs(( long)divisor), ans = 0;
    if (m < n)
        return 0;
    while (m >= n) {
        long  cnt = 1, temp = n;
        while (m >= (temp << 1)) {
            cnt <<= 1;
            temp <<= 1;
        }
        ans += cnt;
        m -= temp;
    }

    return ((dividend < 0) ^ (divisor < 0)) ? -ans : ans;//异或 不一样=1
}
上一篇 下一篇

猜你喜欢

热点阅读