位運算總結

2021-07-11 19:27:53 字數 755 閱讀 3409

共有四種邏輯運算:與,或,非,異或。

移位運算:左移,右移實現乘法。注意一般左移時沒有疑問,後面補0。右移時,不同的編譯器有不同的解釋,一般的是如果即左最高位為0,則右移時還用0補齊,否則是1的話(unsigned或負數),用1補齊。

加減乘除運算,嚴格意義上來說,十進位制的加減乘除就是位運算加減乘除得來的。屬於注意加法在最高位會溢位,即最高位1 + 1 = 0,沒有進製。還有減法等。(對這個不熟,以後再看)。

一些常用的技巧(利用1, 0 的與,或設定位,因為是邏輯運算,所以不影響其他位。(不要死記硬背,否則記錯的話,發現不了問題,理解就可以呢):

a ^ (~a) = 1s (1s表示一串1,負的最小數)。 將最右邊的n 位 清零,清零即與0 與,a & ( ~0 << n).

獲取某一位:兩種方法,將其右移n位,然後與1 與。或者將1 左移n 位,然後與這個數與。 置位,即將此位置位0,這個數與111110111111(隨便寫的,將1左移,然後取反)且,則其他位不變,這個位變為0。將此位置位1,則與000000100000000或。還有一些其他做法。

找出乙個十進位制數的二進位制位串中,所有的1 。此題直觀的方法有兩種,迴圈將1左移(0001000),然後與,得到的值不為0,則此位為1。第二種方法,迴圈右移這個數,然後與1 與。這種方法如果不知道要迴圈多少次,而只是判斷移過後,得到的這個數不為0,即 while(n),則如果碰到最高位為1的數時,會出現死迴圈。

還有一種方法,常用,在其他演算法中也常用,先將這個數減1,然後與自己與,則自己的最右邊乙個數變為0。不管對什麼都適用。

位運算總結

位運算是指按二進位制進行的運算。在系統軟體中,常常需要處理二進位制位的問題。c語言提供了6個位操作 運算子。這些運算子只能用於整型運算元,即只能用於帶符號或無符號的char,short,int與long型別。c語言提供的位運算子列表 運算子 含義 描述 按位與 如果兩個相應的二進位制位都為1,則該位...

位運算總結

位運算是指按二進位制進行的運算。在系統軟體中,常常需要處理二進位制位的問題。c語言提供了6個位操作 運算子。這些運算子只能用於整型運算元,即只能用於帶符號或無符號的char,short,int與long型別。c語言提供的位運算子列表 運算子 含義 描述 按位與 如果兩個相應的二進位制位都為1,則該位...

位運算總結

一 優先順序 高 低 算術運算子 關係運算子 賦值 二 移位運算 要點 1 它們都是雙目運算子,兩個運算分量都是整形,結果也是整形。2 左移 右邊空出的位上補0,左邊的位將從字頭擠掉,其值相當於乘2。3 右移 右邊的位被擠掉。對於左邊移出的空位,如果是正數則空位補0,若為負數,可能補0或補1,這取決...