zoukankan      html  css  js  c++  java
  • 剑指offer四十八之不用加减乘除做加法

    一、题目

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

    二、思路

    1、 采用位运算的方法,分三步:
      (1)、两个数异或:相当于每一位相加,而不考虑进位
      (2)、两个数相与,并左移一位:相当于求得进位
      (3)、重复步骤1和2,两个数相与的结果为0,和即为两个数异或的结果
    2、例子演示:
     
    3+11 = ?
     
    13 的二进制      1 1 0 1                     -----a        13
    11 的二进制      1 0 1 1                     -----b        11  

     (a&b) <<1  ->   1 0 0 1 0                 -----d         18
                a^b  ->     0 1 1 0                   -----e          6

     (d&e) <<1  ->   0 0 1 0 0                 -----f         4
                d^e  ->  1 0 1 0 0                  -----g        20

     (f&g) <<1  ->   0 1 0 0 0                ------h        8
                f^g  ->  1 0 0 0 0                 ------i           16

     (h&i) <<1  ->   0 0 0 0 0               ------h        0       ---- --------退出循环
                h^i  ->  1 1 0 0 0                ------i           24
    在第一步中,采用异或
    第二步中,采用按位与,左移一位

    三、代码

    public class Solution {
        public int Add(int num1,int num2) {
            while( num2!=0 ){ //当进位等于0的时候,返回异或的结果,即是要求的和
                int sum = num1 ^ num2; //两个数异或:相当于每一位相加,而不考虑进位
                int carray = (num1 & num2) << 1;//两个数相与:并左移一位:相当于求得进位
                num1 = sum;
                num2 = carray;
            }
            return num1;
        }
    }
    View Code

    ---------------------------------------------

    参考链接:

    https://www.nowcoder.com/questionTerminal/59ac416b4b944300b617d4f7f111b215

  • 相关阅读:
    Windows远程桌面跳板机无法复制粘贴
    无法打开“XXXX”,因为Apple无法检查其是否包含恶意软件。怎么解决?
    mac下的快捷键
    python:递归函数
    ps:新建Photoshop图像
    python-函数的参数
    python3-定义函数
    python3-调用函数
    python3-函数
    ps:界面概览
  • 原文地址:https://www.cnblogs.com/hezhiyao/p/7662249.html
Copyright © 2011-2022 走看看