• 剑指offer48:不用加减乘除做加法


    1 题目描述

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

    2 思路和方法

      位运算符:两个数异或(^)【1^0=1, 1^1=0, 0^0=0, 0^1=1, 5^5=0, 5^0=5】,相当于每一位相加,而不考虑进位;两个数相与(&)【1&0=0;1&1=1;0&0=0】,并左移一位,相当于求得进位;将上述两步的结果相加。

      我们可以用三步走的方式计算二进制值相加: 5-101,7-111

      第一步:异或(^)相加各位的值,不算进位,101^111得到010。
      第二步:相与(&)计算进位值,各位做与操作得到101,再向左移一位得到1010,即(101&111)<<1得到1010。
      第三步重复上述两步, 各位相加 010^1010=1000,进位值为100=(010&1010)<<1。( 010 & 1010 )相当于( 0010 & b1010 ),位数不一样,前面补0。
      继续重复上述两步:各位相加的值=1000^100 = 1100,进位的值=1000^100 = 0000,进位值为0,跳出循环,1100为最终结果 */

    3 C++核心代码  

     1 class Solution {
     2 public:
     3     int Add(int num1, int num2)
     4     {
     5         while(num2!=0){
     6             int sum=num1^num2;
     7             num2=(num1&num2)<<1;
     8             num1=sum;
     9         }
    10         return num1;
    11     }
    12 };
    View Code

    参考资料

    https://blog.csdn.net/feng_zhiyu/article/details/82112291

  • 相关阅读:
    什么是 Linux
    Java常用几种加密算法
    Java多线程
    SpringSecurity相关配置【SpringSecurityConfig】
    应用上下文配置【AppConfig】
    web.xml
    Web上下文配置【MvcConfig】
    SpringMVC4零配置--Web上下文配置【MvcConfig】
    HTML <meta> 标签 遇到<meta http-equiv="refresh" content="0; url=">详解
    java如何获取当前机器ip和容器port
  • 原文地址:https://www.cnblogs.com/wxwhnu/p/11425367.html
Copyright © 2020-2023  润新知