程式中的所有數在計算機記憶體中都是以二進位制的形式儲存的,位運算就是直接對整數在記憶體中的二進位制位進行操作的運算
& 按位與(and)
| 按位或(or)
^ 按位異或(xor)
~ 按位取反(not)
<< 左移(shl)
>> 帶符號右移(shr)
&
與運算
「&」是雙目運算子,二進位制對應位,同為1則為1,否則為0
例如(二進位制數1010和0110)
1010&0110=0010
|
或運算
「|」是雙目運算子,二進位制對應位,同為0則為0,否則為1
例如(二進位制數1010和0110)
1010|0110=1110
^
異或運算
「^」是雙目運算子,二進位制對應位,相同則為0,不同則為1
例如(二進位制數1010和0110)
1010^0110=1100
~
取反運算
「~」為單目運算子,二進位制位,1變為0,0變為1
例如(二進位制數1010和0110)
~1010=0101,~0110=1001
<<
左移運算
「<<」是雙目運算子,a<>
右移運算
「>>」是雙目運算子,a>>n
把a的二進位制的各二進位全部右移n位,低位補0
例如(a=10(二進位制為1010))
a>>2
得到a=2(二進位制為10)
優先等級
運算子1~2
<<、>>3&
4^5|
6&=、^=、|=、<<=、>>=
一、n乘以2:n<<1
二、n除以2:n>>1
三、n乘以2的m次方:n<>m
五、判斷n的奇偶:n&1
奇為1,偶為0
六、交換n,m的值:n^=m; m^=n; n^=m;
七、n的絕對值:(n^(n>>31))-(n>>31);
八、n,m的最大值:n^((n^m)&-(n=0;
同為1,不同為0
十一、n是否為2的冪:n&(n-1);
是為0,不是為非0
十二、n對m取餘(m必須為2的冪):n&(m-1);
十三、n,m的平均值:((n^m)>>1)+(n&m);
十四、n+1:-~n;
,n-1:~-n;
十五、n的相反數:~n+1;
巧妙運用位運算
本文旨在通過兩道巧妙運用位運算的題,認識位運算的魅力 題意 給定兩個序列 a,b 求 a,b 的最長公共子串行 a b le 10 5 時限 5s 目前求任意兩序列的最長公共子串行,是沒有複雜度低於 o a cdot b 的演算法的 回顧經典的 o a cdot b f max f f f a i ...
位運算的實踐運用
判斷乙個數的奇偶 var n 2n 1 0 var n 1n 1 1向下取整 1.2 1 1.8 1 1.8 0 1 1.14 0 1 1.14 0 1 1.14 0 1 不可對負數取整 2的倍數乘除法 1 2 4 1的2進製左移2位,即乘2的2次方 8 2 2 8的2進製右移2位,即除2的2次方比...
位運算之ACM優化運用
文章 文章組織 1 基本操作符 2 需要注意的問題 3 一些小應用 4 針對具體題目的應用 1 搜尋類 2 字串類 3 其他類基本操作符 與 或 異或 左右移位 取反 需要注意的問題 1 優先順序,這是個非常嚴重的問題,在進行位運算的時候優先順序太容易被忽略掉了 尤其要注意的 移位運算子,單目的取反...