栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

剑指 Offer 65. 不用加减乘除做加法

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

剑指 Offer 65. 不用加减乘除做加法

写在前面

计算机位运算相关概念

举例推演上面的结论:

关于负数的位移

-1左移一位即扩大两倍之后应该变为-2
上述写法中,第一种和第三种写法是符合预期的,但是leetcode编译时第一种写法时会出现
runtime error: left shift of negative value -2147483648
leetcode好像不支持负数的左移?
所以干脆用第三种写法,将左移后的数转换成无符号整数。
具体的原理可能还需要进一步学习

class Solution {
public:
    int add(int a, int b) { 
        
        while(b!=0){
            int sum = a^b;      // 无进位和
            // 这里不支持负数左移 runtime error: left shift of negative value -2147483648
            // 将左移后的数变为无符号数
            int c = (unsigned int)(a&b)<<1;   // 进位 
            a = sum; 
            b = c;
        }
            
        return a;
    }
};
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/293289.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号