今天在做 poj 3279 的時候 ,遇到了位運算;
大概介紹一下吧:
1.因為機器內部運算都是二進位制運算,而我們是通過進製轉換再運算的,故,直接利用機器內部二進位制運算會相對於效率高一些;
2.在bfs中進製反轉類問題,前提在矩陣中只有 0 和 1 的時候才可以使用;
4.下來列舉常用的幾種:(這裡針對c語言和c++語言符號)
(1) a&b;
&運算通常用於二進位製取位操作,例如乙個數 &1的結果就是取二進位制的最末位。這可以用來判斷乙個整數的奇偶,二進位制的最末位為0表示該數為偶數,最末位為1表示該數為奇數。
相同位的兩個數字都為1,則為1;若有乙個不為1,則為0。
00101
11100
(&;或者and)
----------------
00100
(2)a|b;
| 運算通常用於二進位制特定位上的無條件賦值,例如乙個數 | 1的結果就是把二進位制最末位強行變成1。如果需要把二進位制最末位變成0,對這個數 | 1之後再減一就可以了,其實際意義就是把這個數強行變成最接近的偶數。
相同位只要乙個為1即為1。
00101
11100
(|或者or)
----------------
11101
(3) a^b;
異或的符號是^。按位異或運算, 對等長二進位制模式按位或二進位制數的每一位執行邏輯按位異或操作. 操作的結果是如果某位不同則該位為1, 否則該位為0.
xor運算的逆運算是它本身,也就是說兩次異或同乙個數最後結果不變,即(a xor b) xor b = a。xor運算可以用於簡單的加密,比如我想對我mm說1314520,但怕別人知道,於是雙方約定拿我的生日19880516作為金鑰。1314520 xor 19880516 = 20665500,我就把20665500告訴mm。mm再次計算20665500 xor 19880516的值,得到1314520,於是她就明白了我的企圖。
相同位不同則為1,相同則為0。
00101
11100
(^或者xor)
----------------
11001
關於位運算
今天看k神的一篇題解,看到一些關於位運算的技巧。又想起以前學長川哥給的一篇位運算對集合處理的技巧的pdf。所以就一起整理一下。各種位運算子的功能就不累述了。集合的位運算表示 來自川哥給的pdf 基本表示 1.空集 0 2.全集 1 3.只含有第 i 個元素的集合1 集合間的操作 1.s 與 t 的並...
關於位運算
9月21日,對本文從格式到部分內容上都進行了修改 今天看了一位師兄去年的筆經總結,其中有一題是 不許用 和 來實現求任意數除以3的餘數 我想考官的目的應該是想考察學生對位運算的熟悉程度吧,於是我把題目擴充套件成 只能用 和位運算實現正整數除法 和取模 注意 這裡不能使用其它的庫例程來輔助計算,如lo...
關於 位運算
位運算 位運算是把數字用二進位制表示之後,對每一位上0或者1的運算。理解位運算的第一步是理解二進位制。二進位制是指數字的每一位都是0或者1.比如十進位制的2轉化為二進位制之後就是10。在程式設計師的圈子裡有乙個流傳了很久的笑話,說世界上有10種人,一種人知道二進位制,而另一種人不知道二進位制。其實二...