C 位運算及例項計算

2022-02-21 07:07:55 字數 2971 閱讀 8298

前言:

平時在實際工作中很少用到這個,雖然都是一些比較基礎的東西,但一旦遇到了,又不知所云。剛好最近接觸了一些相關這方面的專案,所以也算是對 這些內容重新溫習實踐了一遍。所以這篇不僅作為個人備忘,也分享給各位重溫一遍。

要學會位運算,首先要清楚什麼是位運算?程式中的所有內容在計算機記憶體中都是以二進位制的形式儲存的(即: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的相對前後順序就被破...