c语言位操作详解

⌚Time: 2021-11-17 19:48:33

👨‍💻Author: Jack Ge

c语言中,程序可以对数值进行二进制位的运算,从而提高运行的效率,c语言中共有6种位运算符,分别是:'&'(按位与),'|'(按位或),'^'(异或),'~'(取反),'<<'(左移),'>>'(右移)。下面分别介绍它们的特点和用法

1. “按位与”运算符(&)

按位与运算符的运算规则是参与运算的两个二进制位都为1则为1,否则为0。

真值表:

& 1 0
1 1 0
0 0 0

例:


4:          00000100

-6:     11111010

按位与(0):00000000

按位与的应用:

取01101101的后4位,可以通过与00001111进行按位与运算


        01101101

(&)     00001111

结果  00001101

使01101101的中间3位置0,通过与11100011进行按位与运算


        01101101

(&)     11100011

结果  01100001

2.“按位或”运算符(|)

按位或运算符的运算规则是参与运算的两个二进制位有一个为1则为1,否则为0。

真值表:

| 1 0
1 1 1
0 1 0

例:


2:              00000010

4:              00000100

按位或运算(6):   00000110

按位或运算的应用:

将01101101的后四位置1,可以与00001111进行按位或运算


        01101101

(|)     00001111

结果  01101111

3.“异或”运算符(^)

异或运算符也称为XOR运算符,它的运算规则是参与运算的两个二进制位相同为0,不同为1。

真值表:

^ 1 0
1 0 1
0 1 0

例:


-3:      11111101

5:           00000101

异或运算(-8):11111000

异或运算的应用:

10110010与0001111异或使后四位反转:


        10110110

(^)     00001111

结果  10111001

如a=3,b=4,通过以下运算可以交换两个变量的值,使a=4,b=3


a=a^b;

b=b^a;

a=a^b;

4.“取反”运算符(~)

取反运算符将数值按位取反。0变为1,1变为0。取反运算符为单目运算符,且优先级高于算术运算符、关系运算符、逻辑运算符以及其他的位运算符。

例:


-5:     11111011

~取反(4): 00000100

5.“左移”运算符(<<)

左移运算符将数值的二进制位左移,最左端溢出的数值舍弃。右端低位补0,一个数被左移n位,相当于乘2^n^。由于计算机系统中左移操作比乘2运算快的多,所以在编程中最好将乘2^n^运算用左移运算符代替。

例:


3:          00000011

左移一位(6):00000110

6.“右移”运算符(>>)

右移运算符将数值的二进制位右移,最右端的低位被舍弃。

对于正数来说,右移最高位补0,右移n位相当于将该数除2^n^。

而对于负数,则分为算术右移与逻辑右移。算术右移最高位补符号位1,而逻辑右移补0。

例:


8:           00001000

右移1位(4):00000100


-6:             11111010

算术右移1位(-3):     11111101

逻辑右移1位(125):    01111101