前言:
平時在實際工作中很少用到這個,雖然都是一些比較基礎的東西,但一旦遇到了,又不知所云。剛好最近接觸了一些相關這方面的專案,所以也算是對 這些內容重新溫習實踐了一遍。所以這篇不僅作為個人備忘,也分享給各位重溫一遍。
要學會位運算,首先要清楚什麼是位運算?程式中的所有內容在計算機記憶體中都是以二進位制的形式儲存的(即:0或1),位運算就是直接對在記憶體中的二進位制數的每位進行運算操作。
了解:在c#中可以對整型運算物件按位進行邏輯運算。按位進行邏輯運算的意義是:依次取被運算物件的每個位,進行邏輯運算,每個位的邏輯運算結果是結果值的每個位
運算符號
意義運算物件型別
運算結果型別
物件數例項
~位邏輯非運算
整型,字元型整型1
~a&位邏輯與運算
2a & b
|位邏輯或運算
2a | b
^位邏輯異或運算
2a ^ b
<
位左移運算
2a<<4
>>
位右移運算
2a>>2開始:
一、位邏輯非運算
位邏輯非運算是單目的,只有乙個運算物件。位邏輯非運算按位對運算物件的值進行非運算。符號為:~
即:如果某一位等於0,就將其轉變為1;如果某一位等於1,就將其轉變為0
對二進位制的10010001進行位邏輯非運算,結果等於01101110
用十進位制:~145等於110
二、位邏輯與運算
位邏輯與運算將兩個運算物件按位進行與運算。符號為&。
運算規則為:1&1=1;0&1=0;0&0=0
#region 位運算與運算int a = 11; //
11的二進位制是0000 1011
int b = 13; //
13的二進位制是0000 1101
console.writeline(a & b); //
11 & 13的結果就是0000 1001 即結果是9
三、位邏輯或運算
位邏輯或運算將兩個運算物件按位進行或運算。符號為 |
運算規則為:1|1=1;1|0=1;0|0=0
#region 位運算或運算int a = 11; //
11的二進位制是0000 1011
int b = 13; //
13的二進位制是0000 1101
console.writeline(a | b); //
11 | 13的結果就是0000 1111 即結果是15
四、位邏輯異或運算
位邏輯異或運算將兩個運算物件按位進行異或運算。符號為^
運算規則:1^1=0;1^0=1;0^0=0 (相同得0,相異得1)
#region 位運算異或運算int a = 11; //
11的二進位制是0000 1011
int b = 13; //
13的二進位制是0000 1101
console.writeline(a ^ b); //
11 ^ 13的結果就是0000 0110 即結果是6
五、位左移運算
位左移運算將整個數按位左移若干位,左移後空出的部分0。符號為:<<
運算規則:a<<1 =a乘以2的1次方;a<<2 =a乘以2的2次方;a<<3 =a乘以2的3次方
#region 位左移運算int a = 11; //
11的二進位制是0000 1011
console.writeline(a << 2); //
0000 1011 左位移2位的結果就是0010 1100 即結果是44 (11*2^2=44)
六、位右移運算
位右移運算將整個數按位右移若干位,右移後空出的部分填0。符號為:>>
運算規則:a>>1 = a整除2的1次方;
a>>2 = a整除2的2次方;
a>>3 = a整除2的3次方
#region 位右移運算int a = 11; //
11的二進位制是0000 1011
console.writeline(a >> 2); //
0000 1011 右位移2位的結果就是0000 0010 即結果是2 (11÷(2^2)=2)
總結:1.位運算,雖然平時很少用到位運算子,但是在某些時候,這些確實能夠給我們提供很好的解決方案。
2.在實際應用中,不斷的重溫基礎的知識,加強鞏固。畢竟很多時候,只有將基礎的知識打牢固,後續才能更好的功能拓展和衍生
位運算例項
位運算子 與 或 異或 非 左移運算子 右移運算子 1 例項一 給定字母字串a和字串b,判斷a是否包含所有字母b。這題有很多解法,讓我們回憶一下,最常用的陣列如何解呢。我們維護乙個26長度的陣列,a.z對應陣列的下表是1.26,每個index對應的取0或1,如果存在即為1,如果不存在即為0。遍歷字元...
位運算計算方式與例項
1.非 是乙個單目運算子,只有乙個運算物件。0變成1,1變成0。例如 二進位制1000 1101 進行位邏輯非運算為 0111 0010,對應十進位制 141等於 142。正數取反 對應的負數 1 負數取反 對應的正數 1 例如 14 15 14 13 2.與 將兩個物件按位與運算,1與1等於1,1...
位運算例項與棧
符合字典序且不破壞相對位置用棧 排序演算法穩定性 看相對位置是否能改變。如果當前元素比乙個元素小,而該小的元素又出現在乙個和當前元素相等的元素後面,那麼交換後穩定性就被破壞了。比較拗口,舉個例子,序列5 8 5 2 9,我們知道第一遍選擇第1個元素5會和2交換,那麼原序列中2個5的相對前後順序就被破...