多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
# 位运算bitset应用 ## 位运算分为 << >> ~ & | ^ 引用 bitset 头文件 #include < bitset > std::birset <要显示的二进制位数> (要显示的变量); int a {(int)0b11111111111111111111111111111111}; `std::cout<<std::birset<32>(a);` 注: 我们知道int类型的一个字符占用4个字节,1个字节是8个b(节)所以就是4X8=32 , int 类型的二进制位数就是 32 a 是自定义的变量名称 **### 在bitset运算中,对字符数据类型 整型与非整型要求非常严格,所以我们要带上 unsigned (视自己程序而定)** ## 位运算: ## 左移 << 运算可写作 `a=a<<1;` 注:左移 << 1 在10进制里是 X2的意思,比如一个10进制数“10”在左移1位后,变成“20 ” 左移 << 2 在10进制里是X2的2次方,也就是2x2x10=40 在2进制里是 *2的意思,比如一个2进制数11111111在左移一位后变成 01111111 ## 右移 >> 运算可写作 `a=a>>1;` 注:右移 >> 1 在10进制里是 ÷2的意思,比如一个10进制数“10”在右移1位后,变成“5 ” 右移 >>2 在10进制里是÷2的2次方,也就是10÷(2X2)去掉小数得2 在2进制里是 ÷2的意思,比如一个2进制数11111111在左移一位后变成 11111110 ![](https://img.kancloud.cn/c9/39/c939dbb7b85195bbaca69797022e764e_941x383.png) ## int类型的二进制里,在有符号的 int 里做右移>>运算的时候,某些CPU里默认是补 “1”的,因为默认为负数, 在unsigned int里补位就为“0”了。 ## 因为在计算机设计初期,要保证负数的运算结果为负数,所以默认设计为补 “1” # 反运算 ~ ### `a=~a;` 比如 1111111100000000 反运算就成了 0000000011111111 ### 与预算& 运算规则: 0&0=0;0&1=0;1&0=0;1&1=1 比如 a的值是:0000000 b的值是:11111111 那么a&b 就等于0000000 ### 即:两个同时为1,结果为1,否则为0 ### 或运算| 参加运算的两个对象,按二进制位进行“或”运算。 运算规则:0|0=0;  0|1=1;  1|0=1;   1|1=1; a的值是:0000000 b的值是:11111111 那么a|b 就等于11111111 ### 即:两个同时为0,结果为0,否则为1