美文网首页
位运算实现加减乘除

位运算实现加减乘除

作者: Eoccc | 来源:发表于2019-03-24 20:09 被阅读0次
一. 位运算的基本操作

A = 0011 1100
B = 0000 1101

操作符 描述 例子
如果相对应位都是1,则结果为1,否则为0 (A&B),得到12,即0000 1100
| 如果相对应位都是0,则结果为0,否则为1 (A | B)得到61,即 0011 1101
^ 如果相对应位值相同,则结果为0,否则为1 (A ^ B)得到49,即 0011 0001
按位取反运算符翻转操作数的每一位,即0变成1,1变成0 (〜A)得到-61,即1100 0011
<< 按位左移运算符。左操作数按位左移右操作数指定的位数。 A << 2得到240,即 1111 0000
>> 按位右移运算符。左操作数按位右移右操作数指定的位数。 A >> 2得到15即 1111
>>> 按位右移补零操作符。左操作数的值按右操作数指定的位数右移,移动得到的空位以零填充。 A>>>2得到15即0000 1111
二. 加法
  1. 不考虑进位的按位求和, 异或
  2. 只考虑进位,只有(1,1)才会产生进位,使用按位与可以满足要求。 当前位产生进位,要参与高一位的运算,因此按位与后要向左移动一位。
  3. 递归求和,直到进位为0
int add(int a,int b) {
  int carry,add;
  do{
    add = a^b;
    carry = (a&b)<<1;
    a = add;
    b=carry;
  }while(carry!=0);
  return add;
}
三. 减法

先转换为加法: a-b = a+(-b) = a+(~b+1)

int subtract(int a,int b){
    return add(a,add(~b,1));
}
四. 乘法

乘法的实现可以转换成:k31(2^31)+k30(2^30)+...+k2(2^2)+k1(x^1)+k0*(x^0); 其中k0~k31取0或者1
我也没看懂, 抄的.

// 正整数的乘法
int multiply(int a,int b){
  int ans = 0;
  while(b){
    if(b&1)
      ans = add(ans, a);
    a = a<<1;
    b = b>>1;
  }    
  return ans;
}
五. 除法
int divide(int a, int b){
    int count=0;
    while(a>=b){
        a = subtract(a,b);
        count = add(count,1);
    }
    return count;
}
// 改进的除法:
int div(const int x,const int y){
    int left_num=x;
    int result=0;
    while(left_num>=y){
        int multi=1;
        while(y*multi<=(left_num>>1))
        {
            multi=multi<<1;
        }
        result+=multi;
        left_num-=y*multi;
    }
    return result;
}

相关文章

  • 位运算实现加减乘除

    一. 位运算的基本操作 A = 0011 1100B = 0000 1101 二. 加法 不考虑进位的按位求和, ...

  • JS中的位移运算

    快速理解位运算: 位运算比其他运算(加减乘除)更加底层,所以运算的更快,但是不是所有场景都可以用 位运算只针对整数...

  • 不用加减乘除运算符,求整数的7倍

    问题 不用加减乘除运算符,求整数的7倍 思路 当需要进行避免使用加减乘除的数学运算的时候,通常的方法有:位运算、E...

  • 位运算知识点复习、位运算实现加减乘除

    一、位运算符 按位与按位或按位异或按位取反按位左移按位右移a&ba|b^~aa<<1a>>1 二、位运算实践 1....

  • 如何用位运算实现加减乘除

    由于位运算比普通的加减乘除效率要高很多,所以在在实际编程中应尽可能使用位运算代替加减乘除。以下总结我在编程中常用的...

  • 利用位运算来实现加减乘除

    1 加法我们现在关注二进制加法。发现一个特点。位的异或运算跟求'和'的结果一致: 异或 1^1=0 1^0=1 0...

  • 算术运算和逻辑运算

    算术运算和逻辑运算 算术运算:加减乘除等基本运算 逻辑运算: 逻辑与 &, 如 A &B ,AB同时位真才为真。 ...

  • 位运算加减乘除

    加法: carry = 进位 = AND xor = remains. 减法: The~operator flip...

  • 加法与减法

    加减乘除是数学运算里面最为基础的运算规则,这是数学这座大厦的运行规则所在。如果把加减乘除用来与我的位系统理论联系,...

  • 第二十四节 Swift 高级运算符

    除了加减乘除运算符,常用的位运算符在 Swift里属于高级运算符。 其它的高级运算符还有移位运算符和溢出加法运算符...

网友评论

      本文标题:位运算实现加减乘除

      本文链接:https://www.haomeiwen.com/subject/nwisvqtx.html