学科分类
目录
C语言

位运算符

位运算符是针对二进制数的每一位进行运算的符号,它是专门针对数字0和1进行操作的。C 语言中的位运算符及其用法如表1所示。

表1 位运算符及其用法

运算符 运算 范例 结果
& 0 & 0 0
0 & 1 0
1 & 1 1
1 & 0 0
| 0 | 0 0
0 | 1 1
1 | 1 1
1 | 0 1
~ 取反 ~0 1
~1 0
^ 异或 0 ^ 0 0
0 ^ 1 1
1 ^ 1 0
1 ^ 0 1
<< 左移 00000010<<2 00001000
10010011<<2 01001100
>> 右移 01100010>>2 00011000
11100010>>2 11111000

接下来通过一些具体示例,对表3-6中描述的位运算符进行详细介绍,为了方便描述,下面的运算都是针对byte类型的数,也就是1个字节大小的数。

(1)与运算符“&”是将参与运算的两个二进制数进行“与”运算,如果两个二进制位都为1,则该位的运算结果为1,否则为0。

例如,将6和11进行与运算,6对应的二进制数为00000110,11对应的二进制数为00001011,具体演算过程如下所示:

00000110

&

00001011

———————

00000010

运算结果为00000010,对应数值2。

(2)位运算符“|”是将参与运算的两个二进制数进行“或”运算,如果二进制位上有一个值为1,则该位的运行结果为1,否则为0。

例如,将6与11进行或运算,具体演算过程如下:

00000110

|

00001011

———————

00001111

运算结果为00001111,对应数值15。

(3)位运算符“~”只针对一个操作数进行操作,如果二进制位是0,则取反值为1;如果是1,则取反值为0。

例如,将6进行取反运算,具体演算过程如下:

~ 00000110

—————————

11111001

运算结果为11111001,对应数值-7。

(4)位运算符“^”是将参与运算的两个二进制数进行“异或”运算,如果二进制位相同,则值为0,否则为1。

例如,将6与11进行异或运算,具体演算过程如下:

00000110

^

00001011

———————

00001101

运算结果为00001101,对应数值13。

(5)位运算符“<<”就是将操作数所有二进制位向左移动。运算时,右边的空位补0,左边移走的部分舍去。

例如,一个byte类型的数字11用二进制表示为00001011,将它左移一位,具体演算过程如下:

​ 00001011 <<1

———————

00010110

运算结果为00010110,对应数值22。

(6)位运算符“>>”就是将操作数所有二进制位向右移动。运算时,左边的空位根据原数的符号位补0或者1(原来是负数就补1,是正数就补0)。

例如,一个byte的数字11用二进制表示为00001011,将它右移一位,具体演算过程如下:

​ 00001011 >>1

———————

00000101

运算结果为00000101,对应数值5。

点击此处
隐藏目录