C语言--位运算符
一.位运算符
1 .按位和:
1功能
*只有对应的2个二进制位为1时,结果位才会变为1,否则为0
*例: 10以二进制表示为1010,7以二进制表示为0111。 对两个数值进行运算
*1010
0111
-----------------
0010
*定律:如果在二进制文件中保持与1相同的位置,则在与0相同的位置变为0
2应用:使用运算符判断一个整数变量的奇偶校验
1intmain(2)3inta=10; 4 a1? printf((%d为奇数),a ) :printf ),) %d为偶数),a ); 5返回0; 6 }
利用判断变量奇偶校验
2 .按位或: |
1功能
*如果对应的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应用:使用异或运算符交换两个变量的值
1intmain(2)3/*该用法基于三个定律。 4 .用相同的数值进行异或运算,结果为0。 5 .任何数值与0的异或运算,结果仍为原始数值。 6 .交换定律: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
12printf(a=%d,b=%d ),a,b ); 13 }
交换数值
4 .逐位反转:
1功能
*逐位反转是指按数值的二进制位进行反转操作,0为反转1,1为反转0
2应用
*例:用二进制数将10表示为1010,对1010进行~操作
*1010
-----------------
0101
5 .左移,右移
1功能
*an是指将a的各二进制比特向右移动n比特,在保持编码比特的状态下向右移动n比特,从而实际上除以2的n次方
2应用
*例:将10以二进制表示为1010,进行将1010向左偏移1位的操作,即为10100即20。 对1010进行1比特右移操作,结果为101即5 .
*注意:如果以后要对变量进行乘法或除法,可以使用左移或右移来提高性能