• 不使用+-*/计算两数之和


    不用加减乘除做加法

    写一个函数,求两个整数之和,要求在函数体内不得使用 “+”、“-”、“*”、“/” 四则运算符号。

    示例:

    输入: a = 1, b = 1
    输出: 2
    

    提示:

    • a, b 均可能是负数或 0
    • 结果不会溢出 32 位整数

    解题思路:计算 5 + 17 其二进制为 00101 + 10001

    # 1.对两个二进制数的每一位相加,而不进位,其本质就是异或运算
    10001 ^ 00101 = 10100
    
    10001
    00101
    ------
    10100
    
    # 2. 对两个二进制数进行与运算,然后左移一位
    10001 & 00101 << 1
    
    10001
    00101
    ------
    00001 << 1 = 00010
    
    # 3. 将1和2两个计算结果进行求和,求和的过程依然是1,2两个步骤。此时计算步骤1时已经不产生进位,所以异或结果就是求和结果,执行2步骤的结果为0,依此条件可以退出循环
    10100
    00010
    ------
    10110 = 22 = 5 + 17
    
    # 在计算机系统中,数值一律用 补码 来表示和存储。补码的优势: 加法、减法可以统一处理(CPU只有加法器)。因此,以上方法 同时适用于正数和负数的加法 。
    
    class Solution {
        public int add(int a, int b) {
            int sum, carry;
            do {
                sum = a ^ b;
                carry = (a & b) << 1;
                a = sum;
                b = carry;
            }while (b != 0);
            return a;
        }
    }
    
  • 相关阅读:
    取某个关键词以及之后的数据
    从SQL下载大量数据到Excel
    SQL 分页
    whereis linux文件搜索
    crontab Linux定时器工具
    Angular
    工具
    百度OAuth2.0登录
    JS事件学习 拖拽,鼠标键盘事件实例汇总
    信息栏滚动效果学习总结
  • 原文地址:https://www.cnblogs.com/code-duck/p/13773029.html
Copyright © 2020-2023  润新知