返回

用位运算轻松玩转“加减乘除”!让你轻松入门!

后端

位运算作为计算机科学中的重要技术之一,因其简洁和高效性而广泛应用于各种领域,掌握位运算技巧,无论是开发人员还是计算机爱好者,都能在日常工作或项目开发中获得极大的帮助。

位运算的常用方法

1.判断奇偶数

判断一个整数奇偶与否可以通过查看其二进制表示的末位,1为奇数,0为偶数。

int is_odd(int n) {
  return n & 1;
}

2.取反操作

取反操作通过将数字的每一位都从0变为1,或从1变为0,进行翻转。

int bitwise_not(int n) {
  return ~n;
}

3.左移和右移操作

左移操作(<<)将数字的二进制表示向左移动一定数量的位,相当于乘以2的幂。右移操作(>>)则相反,将数字的二进制表示向右移动一定数量的位,相当于除以2的幂。

int left_shift(int n, int shift) {
  return n << shift;
}

int right_shift(int n, int shift) {
  return n >> shift;
}

4.与操作(&)和或操作(|)

与操作(&)比较两个数字的二进制表示,如果对应位置的位都为1,则结果为1,否则为0。或操作(|)则相反,如果对应位置的位有一个为1,则结果为1,否则为0。

int bitwise_and(int a, int b) {
  return a & b;
}

int bitwise_or(int a, int b) {
  return a | b;
}

5.异或操作(^)

异或操作(^)与或操作类似,但其结果为1当且仅当两个数字的对应位置的位不同时。

int bitwise_xor(int a, int b) {
  return a ^ b;
}

6.按位清除

按位清除是清除数字二进制表示中指定位置的位,从而将该位设置为0。

int bitwise_clear(int n, int position) {
  return n & ~(1 << position);
}

位运算加减乘除的实现

位运算除了基本的运算外,还可用于实现加减乘除。

1.加法

位运算中的加法是通过将两个数字的二进制表示按位相加来实现的。

int bitwise_add(int a, int b) {
  int carry = 0;
  int result = 0;

  while (a || b || carry) {
    int sum = a % 2 + b % 2 + carry;
    carry = sum / 2;
    result = result * 2 + sum % 2;
    a /= 2;
    b /= 2;
  }

  return result;
}

2.减法

位运算中的减法是通过将被减数的二进制表示按位取反,然后与减数按位相加来实现的。

int bitwise_subtract(int minuend, int subtrahend) {
  int inverted_subtrahend = ~subtrahend + 1;
  return bitwise_add(minuend, inverted_subtrahend);
}

3.乘法

位运算中的乘法是通过重复加法来实现的。

int bitwise_multiply(int a, int b) {
  int result = 0;
  int temp = a;

  while (b) {
    if (b % 2) {
      result = bitwise_add(result, temp);
    }
    temp = temp << 1;
    b = b >> 1;
  }

  return result;
}

4.除法

位运算中的除法是通过重复减法来实现的。

int bitwise_divide(int dividend, int divisor) {
  int result = 0;
  int temp = dividend;

  while (temp >= divisor) {
    result++;
    temp = bitwise_subtract(temp, divisor);
  }

  return result;
}

位运算在编程中有着广泛的应用,从低级系统优化到高级算法实现,都能发挥作用。掌握位运算技巧,有助于提升编程能力和解决问题的效率。希望这篇文章对您有所帮助,如果您有任何问题或建议,欢迎随时提出!