先讲讲位运算:
位运算,说穿了,就是直接对整数在内存中的二进制位进行操作计算。
优点:效率高
缺点:复杂
巧妙使用位运算,有时可以有非常奇妙的结果。
常见位运算:
位与, 计算符号 & ,0&0=0; 0&1=0; 1&0=0; 1&1=1;
位或,计算符号 | , 0|0=0; 0|1=1; 1|0=1; 1|1=1;
位异或,计算符号 ^ , 0^0=0; 0^1=1; 1^0=1; 1^1=0;
位取反,~ ,
左移运算符, << ,右边默认补0 。
右移运算符, >> ,右边丢弃,左边正数补0,负数补1 。
一些高阶位运算:
取末三位, x and 7
取末k位, x and ((1 << k) - 1 )
MB转换成Bytes, x << 20
32位正整数二进制中1的个数计算:
位图,bitset
使用方式:#include <bitset>
介绍:bitset就像一个bool类型的数组,每个元素只占1bit,每个元素都可以被单独访问。bitset在编译时就需要确定大小。
bitset会默认都初始化为0 。