筆記 位運算

2021-07-23 23:17:00 字數 1866 閱讀 1569

(1)格式:x&y

(2)規則:對應位均為1時才為1,否則為0。

例如,3&9=1:       0011

& 1001

-----------

0001

(3)主要用途:取(或保留)1個數的某些位,其餘各位置0。

(1)格式:x|y

(2)規則:對應位均為0時才為0,否則為1:3|9=11。

例如,3|9=11:     0011 

| 1001

-----------

1011

(3)主要用途:將1個數的某(些)位置1,其餘各位不變。

(1)格式:x^y

(2)規則:對應位相同時為0,不同時為1。

(3)主要用途:使1個數的某些位翻轉,其餘各位不變。

交換a b的值,在不使用第三個變數的情況下:

1. a = a + b

b = a - b

a = a - b

2. a = a ^ b

b = a ^ b

a = a ^ b

(1)格式:~x

(2)規則:各位翻轉,即原來為1的位變成0,原來為0的位變成1。系統可以自動適應,移植性好

在ibm-pc機中,~0=0xffff,~9=0xfff6
(3)主要用途:間接地構造乙個數,以增強程式的可移植性。

(1)格式:x << 位數

(2)規則:使運算元的各位左移,低位補0,高位溢位

5 << 2 =20
(1)格式:x >> 位數

(2)規則:使運算元的各位右移,移出的低位捨棄;

高位:

1)對無符號數和有符號中的正數,補0;

2)有符號數中的負數,取決於所使用的系統:補0的稱為「邏輯右移」,補1的稱為「算術右移」。

例如,20 >> 2=5。

(1)x、y和「位數」等運算元,都只能是整型或字元型資料。除按位取反為單目運算子外,其餘均為雙目運算子。

(2)參與運算時,運算元x和y,都必須首先轉換成二進位制形式,然後再執行相應的按位運算。

例如,5<<2=20:0101 → 10100,20 >> 2=5:10100 → 00101

(3)實現&、|、^運算主要用途的方法

1)構造1個整數:該數在要取(或保留)的位、或要置1的位、或要翻轉的位上為1,其餘均為0。

2)進行按位與、或按位或、或按位異或操作。

(4)實現按位取反主要用途的方法

1)求~0,間接地構造乙個全1的數;

2)按需要進行左移或右移操作,構造出所需要的數。

例如,直接構造乙個全1的數,在ibm-pc機中為0xffff(2位元組),而在vax-11/780上,卻是0xffffffff(4位元組)。如果用~0來構造,系統可以自動適應。

1.從鍵盤上輸入1個正整數給int變數num,輸出由8~11位構成的數(從低位、0號開始編號)

基本思路:

(1)使變數num右移8位,將8~11位移到低4位上。

(2)構造1個低4位為1、其餘各位為0的整數。

(3)與num進行按位與運算。

/*程式功能:輸出乙個整數中由8~11位構成的數*/

main()

2.從鍵盤上輸入1個正整數給int變數num,按二進位制位輸出該數

#include "stdio.h"

main()

printf("\bb\n"); //為什麼要退一格? 最後有乙個 , 覆蓋它

}

位運算筆記

10 1010 12 1100 與例如 以下按位比較,當兩個同時為1則為1,否則為0 10 1010 12 1100 結果為 8 1000 或例如 以下按位比較,當兩個有任何乙個為1則為1,否則為0 10 1010 12 1100 結果為 14 1110 非例如 以下按位比較,當兩個數不同時則為1否...

位運算筆記

需要掌握的知識 原碼 反碼 補碼 原碼 是最簡單的機器數表示法。用最高位表示符號位,1 表示負號,0 表示正號。其他位存放該數的二進位制的絕對值。1010 最高位為 1 表示這是乙個負數,其他三位為 010 即 0 2 2 1 2 1 0 20 2 表示冪運算子 所以1010表示十進位制數 2 面臨...

位運算 筆記

這幾天擼了一下位運算。寫個筆記總結一下。首先運算了解一下。按位與 按位或 按位異或 取反 左移 右移 這一題,我們本來可以不停除2,看最後是否等於1 但是掌握了上面我們說的思想以後。就直接簡單了。只需要兩行 class solution 因為如果是2的冪 那麼它的二進位制必定只有乙個1.去掉了最後乙...