C语言--位运算符
一、位运算符
1.按位与:&
1> 功能
* 只有对应的两个二进制位为1时,结果位才为1,否则为0
* 举例:10用二进制表示为1010, 7用二进制表示为0111。对两个数值进行&运算
* 1010
0111
--------------------
0010
* 规律:二进制中,与1相&保持原位,与0相&就为0
2> 应用:使用&运算符,判断一个整数变量的奇偶性
1 int main() 2 { 3 int a = 10; 4 a&1 ? printf("%d为奇数", a) : printf("%d为偶数", a); 5 return 0; 6 }
2.按位或:|
1> 功能
* 只要对应的两个二进制位中有一个为1,结果就为1,否则为0
2> 应用
* 10用二进制表示为1010, 7用二进制表示为0111。对两个数值进行|运算
* 1010
0111
--------------------
1111
3.按位异或:^
1> 功能
* 当对应的二进制位相异时,结果为1,否则为0
* 举例:10用二进制表示为1010, 7用二进制表示为111。对两个数值进行^运算
* 1010
0111
--------------------
1101
2> 应用: 使用位异或运算符,实现两个变量值的互换
1 int main() 2 { 3 /*该种用法基于三个规律。 4 1.相同数值进行异或运算,结果为0。 5 2.任何数值与0异或运算,结果还是原来数值。 6 3.交换规律:a^b^c=a^c^b */ 7 int a = 10; 8 int b = 11; 9 a = a ^ b;//a = 10^11 10 b = a ^ b;//b=10^11^11=10 11 a = a ^ b;//a=10^11^10=11 12 printf("a=%d,b=%d", a, b); 13 }
4.按位取反:~
1> 功能
* 按位取反,就是对数值的每个二进制位进行取反操作,0取反变1,1取反变0
2> 应用
* 举例:10用二进制表示为1010,对1010进行~操作
* 1010
--------------------
0101
5.左移<< 、右移>>
1> 功能
* a<<n就是将a的各个二进制位向左移动n位,高位丢弃,地位用0补充,左移n位,其实就是乘以2的n次方;a>>n就是将a的各个二进制位向右移动n位,保持符号位不变,右移n位,其实就是除以2的n次方
2> 应用
*举例:10用二进制表示为1010,对1010进行左移1位操作,结果是10100也就是20;对1010进行右移1位操作,结果是101也就是5.
*注意:以后对变量进行乘法或除法时,运用左移或右移可以提高性能
二、自我总结
按位运算符是直接对二进制位进行操作,通过按位运算符我们可以很容易的做到很多事情,如判断变量数值的性,不引入第三变量的前提下交换两个变量的值,以及对变量进行乘除操作等,并且可以提高性能,方便易用。