位运算
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(逻辑右移),有的补符号位(算术右移)。