c语言位操作详解

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

按位或运算的应用:

  • 将特定位置1
    将01101101的后四位置1,可以与00001111进行按位或运算
		01101101
(|)		00001111
结果	01101111

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

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

^ 1 0
1 0 1
0 1 0

例:

-3:		 11111101
5:			 00000101
异或运算(-8):11111000

异或运算的应用:

  • 与1异或使特定位反转
    10110010与0001111异或使后四位反转:
		10110110
(^)		00001111
结果 	10111001
  • 与0异或保持原值
  • 交换两个数值
    如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位,相当于乘2n。由于计算机系统中左移操作比乘2运算快的多,所以在编程中最好将乘2n运算用左移运算符代替。
例:

3:		  	00000011
左移一位(6):00000110

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

右移运算符将数值的二进制位右移,最右端的低位被舍弃。
对于正数来说,右移最高位补0,右移n位相当于将该数除2n
而对于负数,则分为算术右移与逻辑右移。算术右移最高位补符号位1,而逻辑右移补0。
例:

8:			 00001000
右移1位(4):00000100
-6:			  	11111010
算术右移1位(-3): 	11111101
逻辑右移1位(125):	01111101

参考资料:
谭浩强,C 程序设计 (第三版)

猜你喜欢

转载自blog.csdn.net/m0_60352504/article/details/121382617