位运算及其性质
定義
| 按位與 | & | 如果兩個相應的二進制位都為1,則該位的結果值為1,否則為0 |
| 按位或 | l | 兩個相應的二進制位中只要有一個為1,該位的結果值為1 |
| 按位異或 | ^ | 若參加運算的兩個二進制位值相同則為0,否則為1 |
| 取反 | ~ | 對一個二進制數按位取反,即將0變1,將1變0 |
| 左移 | << | 用來將一個數的各二進制位全部左移N位,右補0 |
| 右移 | >> | 將一個數的各二進制位右移N位,移到右端 的低位被舍棄,對于無符號數,高位補0 |
性質及應用
左移 <<
每左移一位相等于乘上2
右移 >>
每右移一位相當于除于2
按位與 &
判斷a的第j位是0還是1:若a&(1<<j)為正,該位是1;否則該位為0。
每執行一次a=a&(a-1),會將a用二進制表示時最右邊的一個1變為0
如果需要判斷一個數a是否為2的次冪,只需要計算出a&(a-1)的值,如果是0的話該數是2的次冪,反之則反之
取一個數a的最底位的1,用a&-a, 例如20(10) = 10100(2),那么20&-20 = 100(2);
按位異或 ^
如果需要將a的第j位取反的話,只需要進行 a^(1<<j)即可;
利用自反性交換兩個數,按位異或有個很神奇的性質–自反性 a ^ b ^ b = a;
利用這個性質我們可以不用第三個變量就能交換兩個數; 例如:我們要交換a和b兩個,只需要進行以下操作即可;a = a ^ b;b = a ^ b;a = a ^ b;滿足:
交換律 a ^ b==b ^ a
結合律 (a ^ b) ^ c == a ^ (b ^ c)
對于任何數x,都有 x ^ x=0,x^0=x
若a ^ b=c,則a ^ c=b
按位或 l
update:
總結
- 上一篇: win10系统里网速是可以调win10怎
- 下一篇: [XSY4197] Snow(树形DP)