# 位運算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

## 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