位運算概念與運用

2021-08-06 05:18:26 字數 1554 閱讀 3940

程式中的所有數在計算機記憶體中都是以二進位制的形式儲存的,位運算就是直接對整數在記憶體中的二進位制位進行操作的運算

&   按位與(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 優先順序,這是個非常嚴重的問題,在進行位運算的時候優先順序太容易被忽略掉了 尤其要注意的 移位運算子,單目的取反...