<<(左移)、>>(右移)、~(取反)、&(与)、|(或)、^(异或)
-
左移<<:
-
语法:
value<<shift //例子 13<<3 //13左移三位,即13*2^3=104
-
错误示例:
int x=20; int y=x<<3; //不会修改x的值 //修改x值得用 x<<=3; //等价于:x=x<<3;
-
-
右移>>:
同左移,只是符号不同;
value>>shift //例子 //13右移三位,空白部分用0填充,超过边界的位将被删除,即13/2^3=1(退位取整) //13转换位二进制:00001101,右移3位后:00000001,即1 13>>3
示例:
int q=43; q>>=2; //即43/2^2=10
-
按位取反~:
- 将每个0转换为1;
- 将每个1转换为0;
~a;
-
与&:
- 都为1则为1;
- 否则为0;
a&=b; //a=a&b;
-
按位或|:
- 有1则为1;
- 没有1则为0;
a|=b; //a=a|b;
-
异或^:
- 相同为0;
- 不同为1;
a^=b; //a=a^b;
按位运算符的替代表示:
标准表示 | 替代表示 |
---|---|
& | bitand |
&= | and_eq |
| | bitor |
|= | or_eq |
~ | compl |
xor | |
^= | xor_eq |
a^=b; //a=a xor b;
b=~a&b; //b=compl a bitand b;
常用的按位运算符技术:
- lottabits表示一个值;
- bit表示特定位的值,第n位的值为2^n;即术语位(bit)表示2的幂;
-
打开位: 将bit位从0或1修改为1
lottabits=lottabits|bit; lottabits|=bit; //解释: //假设:lottabits=01100101;bit=3=2^3即bit=1000; //则:lottabits|bit= 01100101 OR // 00001000 //= 01101101 //将第3位从0变为1
-
切换位:
- 将打开的bit位关闭,即1变0;
- 将关闭的bit位打开,即0变1;
lottabits^=bit; //lottabits=lottabits^bit;
-
关闭位:
- 关闭相应的位:
lottabits=lottabits & ~bit; lottabits&=~bit;
-
测试位的值:
- 确定bit位是否为1;
//1. if(lottabits==bit) //大多数情况下不管用 //2. if(lottabits & bit==bit) //3. if(lottabits & bit) //2的简化版