位运算

1 什么是位运算?

计算机底层存储数据是以二进制的形式实现的,即0和1的组合。计算机对二进制数字进行的运算就是位运算。位运算的时候是对二进制数字的每一位进行的。

2 有哪些位运算?

位运算包含的种类如下,不同的位运算用于不同的位运算符

位运算符 含义 举个栗子 运算规则
| 按位或 1010 | 0101 = 1111 按位或:两个位有一个为1时结果就为1,两个位全部为0时结果才为0
& 按位与 1010 & 0101 = 0000 按位与:两个位有一个为0时结果就是0,两个位全都为1时结果才为1
~ 按位取反 ~1010 = 0101 按位取反:0变成1,1变成0
^ 按位异或 1001 ^ 0101 = 1100 按位异或:两个位相同时为0,不同时为1
>> 右移 0010 >> 1 = 0001 右移:所有的位向后移动n位(例子中代表移动一位)
<< 左移 0010 << 1 = 0100 右移:所有的位向左移动n位(例子中代表移动一位)

补充1:对于位运算来说,还有一种同或的概念,它和异或是相反的(对异或得到的结果取反就可以得到),也就是说两个位相同为1,不同为0。

补充2:关于移位,左移的时候所有的位向左移动,低位补0。右移的时候,如果是无符号数,高位补0;如果是有符号数,不同的编译器处理方式可能有区别,有的补0(逻辑右移),有的补符号位(算术右移)。

3 位运算的经典用法

3.1 利用位运算做加法