_ooOoo_
o8888888o
88" . "88
(| -_- |)
O\ = /O
____/`---'\____
.' \\| |// `.
/ \\||| : |||// \
/ _||||| -:- |||||- \
| | \\\ - /// | |
| \_| ''\---/'' | |
\ .-\__ `-` ___/-. /
___`. .' /--.--\ `. . __
."" '< `.___\_<|>_/___.' >'"".
| | : `- \`.;`\ _ /`;.`/ - ` : | |
\ \ `-. \_ __\ /__ _/ .-` / /
======`-.____`-.___\_____/___.-`____.-'======
`=---='
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
常用的位运算技巧:
1.取出x的第i位:
int main(){
y = (x>>(i-1))&1;
return 0;
}
2.将x第i位取反:
int main(){
x ^= (1<<(i-1));
return 0;
}
3.将x第i位变为1:
int main(){
x |= (1<<(i-1));
return 0;
}
4.将x第i位变为0:
int main(){
x &= (~(1<<(i-1)));
return 0;
}
5.将x最靠右的1去掉:
int main(){
x = x&(x-1);
return 0;
}
6.取出x最靠右的1:
int main(){
y = x&(-x);
return 0;
}