zoukankan      html  css  js  c++  java
  • 使用位运算计算两个整数的加减

    1、加法:

    两个整数的加法可以转换成:两个整数各自2进制位的纯加法和s【不包括进位】,记录两个整数在哪一位上有进位的变量carry。然后结果就转化为了 s+carry。接着,再使用相同的方式,直到carry为0为止。此时,相当于被加数为0,和就是加数本身。

    递归方式:

    1 // 使用位运算计算两个数的加法
    2         int sum(int a, int b)
    3         {
    4             if (b == 0) return a;
    5             int s = a ^ b;
    6             int carry = (a & b) << 1;  // 如果两个数对应的位都是1,说明该位有一个进位
    7             // 此时的和即为 sum + carry
    8             return sum(s, carry);
    9         }

    非递归方式:

     1         int _sum(int a, int b)
     2         {
     3             int s = a ^ b;
     4             int carry = (a & b) << 1;  // 如果两个数对应的位都是1,说明该位有一个进位
     5             while (carry != 0)
     6             {
     7                 a = s;
     8                 b = carry;
     9                 s = a ^ b;
    10                 carry = (a & b) << 1;
    11             }
    12 
    13             return s;
    14         } 
  • 相关阅读:
    日志处理
    md5加密
    os 模块
    time模块
    函数的进阶
    参数 返回值
    文件操作
    集合 拷贝
    linux如何更快的远程拷贝?scp,tar,rsync?
    修改内核临时端口范围
  • 原文地址:https://www.cnblogs.com/kylinxue/p/4797495.html
Copyright © 2011-2022 走看看