位运算

位运算

位运算是什么

位运算符主要针对二进制,它包括了:“与”、“非”、“或”、“异或”。从表面上看似乎有点像逻辑运算符,但逻辑运算符是针对两个关系运算符来进行逻辑运算,而位运算符主要针对两个二进制数的位进行逻辑运算。

  A = 0011 1100
  B = 0000 1101
  -----------------
  A&B = 0000 1100
  A | B = 0011 1101
  A ^ B = 0011 0001
  ~A= 1100 0011

在这个例子中,A和B都用二进制表示,在十进制下,a = 60,b = 13。位运算符的定义如下:

符号 说明 示例
按位与操作符,当且仅当两个操作数的某一位都非0时候结果的该位才为1。 (A&B),得到12,即0000 1100
| 按位或操作符,只要两个操作数的某一位有一个非0时候结果的该位就为1。 (A | B)得到61,即 0011 1101
^ 按位补运算符翻转操作数的每一位。 (〜A)得到-61,即1100 0011
<< 按位左移运算符。左操作数按位左移右操作数指定的位数。 A << 2得到240,即 1111 0000
>> 按位右移运算符。左操作数按位右移右操作数指定的位数。 A >> 2得到15即 1111
>>> 按位右移补零操作符。左操作数的值按右操作数指定的位数右移,移动得到的空位以零填充。 A>>>2得到15即0000 1111

位运算有什么用

在计算机上,位运算的效率要高于普通运算,因为计算机本身是基于二进制的。在某些特殊算法中,位运算可以提升程序效率。下面是几个应用场景的例子。

  1. 左移<<,如果是10进制向左移动一位,就成了10倍,移两位乘100倍。所以在数字没有溢出的前提下,对于正数和负数,二进制左移左移n位就相当于乘以2的n次方。
  2. 运算,将一个单元与0进行位与运算结果为零;判断奇偶性:用if ((a & 1) == 0) 代替 if (a % 2 == 0)来判断a是不是偶数。
  3. >>右移,右移常被用来做 / (2 ^ n)的运算,因为直接基于二进制运算,所以右移效率比 / (2 ^ n)高。
posted @ 2021-01-27 21:58  超载的巴赫朋克  阅读(111)  评论(0编辑  收藏  举报