基本概念
对于整数类型变量中的某一位,或若干位进行操作
共六种:
& | 按位与 |
| | 按位或 |
^ | 按位异或 |
~ | 按位取反 |
<< | 左移 |
>> | 右移 |
& 按位与
全1则1,有0则0
例:21&18 = 16
即: 00010101&00010010 = 0001000
作用:
1.把变量的某些位清零
ps:2^8 = 2^4*2^4
2.获取变量中的某一位
| 按位或
全0则0,有1则1
例:21|18 = 23
作用:
1.将变量中某些位置为1且保证其他位不变
Ps:A|0 = A
^ 按位异或
不同则1,相同则0
作用:
1.将变量中的某些位取反
2.简单数据加密(穷举法可证
如果a^b=c,那么c^b=a 以及 c^a=b (类似乘法和除法)
将b做秘钥,a为原文,c为密文
3.交换两个变量(穷举法可证
int a = 5, b =7;
a = a^b;
b = b^a;
a = a^b;
4.开关问题经常使用
^=1(或用!)
~ 按位非
0变1,1变0
<< 左移运算符
a<<b
将a各二进制位全部左移b位后得到的值,左移越界丢弃,低位补0。a的值不因运算而改变
作用
实际上,左移一位等于乘以2
可以用来开2的n次方
>> 右移运算符
a>>b
将a各二进制位全部右移b位后得到的值。溢出最右边的值就被丢弃
大多数编译器规定:右移时原符号位为1,右移则补1,原符号位为0,右移就补0
作用
右移n位相当于除2^n次方,但有可能除不尽,即小里取整