基础算法|位运算
1.与运算
2.或运算
3.非运算
4.异或运算
5.左移、右移运算
心有猛虎,细嗅蔷薇。你好朋友,这里是锅巴的C\C++学习笔记,常言道,不积跬步无以至千里,希望有朝一日我们积累的滴水可以击穿顽石。
与运算
与运算(&):全
1
才为1
实践代码:
void solve(){/** 7 -> 0111* 8 -> 1000* 7&8 -> 0000* */cout<<(7&8)<<endl;
}
输出
或运算
或运算(|):有
1
就为1
实践代码:
void solve(){/** 7 -> 0111* 8 -> 1000* 7|8 -> 1111* */cout<<(7|8)<<endl;
}
输出
非运算
非(~):按位
取反
,符合位也取反
实践代码:
void solve(){/** 7 -> 0111* ~7 -> 1000* */cout<<(~7)<<endl;
}
输出
异或运算
异或(^):同
0
异1
实践代码:
void solve(){/** 7 -> 0111* 10 -> 1010* 7^10-> 1101* */cout<<(7^10)<<endl;
}
输出
左移、右移运算
左移、右移(<</>>):
左移k位:相当于这个数 * 2k
右移k位:相当于这个数 / 2k
实践代码:
void solve(){/** 1 -> 00001* 1<<4 -> 10000* 16>>4-> 00001*/cout<<(1<<4)<<endl;cout<<(16>>4)<<endl;
}
输出
补充:
如果想要判断二进制数中某一位上是1还是0,可以>>和&结合,如a=10000001(二进制数),现在我们要求它第3位上是什么,那么我们就可以用 a>>3&1来实现
心有猛虎,细嗅蔷薇。再见了朋友~