< bitset >

bitset入门

补码

补码,原码取反加1.

在补码中:

10000<1111110000 < 11111

为何用补码?——可直接用加法。


2的幂运用:

计算n×(2m)n \times (2 ^ m) : n << m;
计算n÷(2m)n \div(2 ^ m) : n >> m; \

二进制应用

将二进制某一位设为0:a & ~(1 << b)
将二进制某一位设为1:a | (1 << b)

LowbitLowbit algorithm

lowbit(x) = x & (-x)

求 x 的最低位1所代表的数值(或位置):Lowbit算法
求数值:lowbit(x) = x&(-x)
x的补码-x,在最低位1及其之前的所有位都是互补的,即最低位1左边的位都被翻转,右边的位本身就是0,所以&后仅保留最低位的1。
求位置:循环右移计数直到归零。\

汉字编码

汉字编码\

//C25zhangchengjun发明的汉字伪加密
#include<bits/stdc++.h>
using namespace std;
const int N = 1e5+10;
string s;
int main(){
	while(cin >> s){if(s.size()%2==1)s=s+' ';
	for(int i = 0; i < s.size(); i+=2){
		swap(s[i],s[i+1]);
	}
	cout << s << endl;}
	return 0;
}