zoukankan      html  css  js  c++  java
  • 位运算计算加减乘除

    1)位运算加法:

    int a=3,b=4;

    while(b!=0){

      num=a^b;

      carry=a&b<<;

      a=num,b=carry;

    }

    最终a为结果

    举个例子:

    对于两数二进制相加,不进位相加相当于异或num,指考虑进位计算为与,并左移一位carry;当carry不为0时表示有进位,将进位的数carry不进位“加”到num中,得到新的num和carry;

    a = 0011, b = 1001;
    start;

    first loop;
    1.1 sum = 1010
    1.2 carry = 0010
    1.3 carry != 0 , go on;

    // 递归写法
    int add(int num1, int num2){
        if(num2 == 0)
            return num1;
        int sum = num1 ^ num2;
        int carry = (num1 & num2) << 1;
        return add(sum, carry);
    }
    
    // 迭代写法
    int add(int num1, int num2){
        int sum = num1 ^ num2;
        int carry = (num1 & num2) << 1;  
        while(carry != 0){
            int a = sum;
            int b = carry;
            sum = a ^ b;
            carry = (a & b) << 1;  
        }
        return sum;
    }

    2)减法运算:

    通过加法器来实现减法器,即首先实现一个加法器,设为add(int a,int b);

    然后对两个数num1,num2,num1-num2=num1+(-num2);对于一个数的负数在计算机中时取反再加1,即m_num2=add(~num2,1);然后add(num1,m_num2);

    /*
    * num1: 减数
    * num2: 被减数
    */
    int substract(int num1, int num2){
        int subtractor = add(~num2, 1);// 先求减数的补码(取反加一)
        int result = add(num1, subtractor); // add()即上述加法运算  
        return result ;
    }

    3)乘法

    https://www.jianshu.com/p/7bba031b11e7

  • 相关阅读:
    Mina Core 10-执行器过滤器
    Mina Core 09-编解码过滤器
    Mina Core 08-IoBuffer
    Mina Basics 07-处理程序Handler
    Mina Basics 06-传输
    Mina Basics 05-过滤器
    Mina Basics 04- 会话
    Mina Basics 03-IoService
    Mina Basics 02-基础
    Mina Basics 01- 入门
  • 原文地址:https://www.cnblogs.com/joelwang/p/10946423.html
Copyright © 2011-2022 走看看