位運算的應用

2021-09-06 11:50:32 字數 2202 閱讀 5298

使用pascal的oiers簡要介紹一下c/c++樣式的位運算(bitwise operation)。其優先順序:not>and>xor>or

名稱

c/c++樣式

pascal樣式

簡記法則

按位與

&

and

全一則一,否則為零

按位或

|

or

有一則一,否則為零

按位取反

~

not

是零則一,是一則零

按位異或

^

xor

不同則一,相同則零

左移位

<<

shl

a<

右移位

>>

shr

a>>k等價於a/2k

•位運算的特殊應用

and

用以取出乙個數的某些二進位制位

取出乙個數二進位制中的最後乙個1(lowbit):x&-x

or將乙個數的某些位設為1

not間接構造一些數:~0u=4294967295=2

32-1

xor

不使用中間變數交換兩個數:

a=a^b; b=b^a; a=a^b;

將乙個數的某些位取反

•獲取乙個或多個固定位的值

假設x=1010(10進製的10)

我們要獲取從左邊數第2位的值,那麼我們可以這樣來取

x&(1<<1)也就是

x:               1010

1<<1:         0010

x&(1<<1)   0010

這樣我們就可以通過判斷x&(1<<2)是否等於0來知道這一位是0還是1了

當然我們可以用x&(3<<2)來取得第3位和第4位

•把乙個或多個固定位的值置零

假設x=1010(10進製的10)

我們要把從左邊數第2位的值置零,那麼我們可以這樣來做

x&(~(1<<1))也就是

x:                    1010

~(1<<1):         1101

x&(~(1<<1))   1000

當然我們可以用x&(~(3<<2))來把第3位和第4位置零

•把乙個或多個固定位的值取反

假設x=1010(10進製的10)

我們要把從左邊數第2位的值取反,那麼我們可以這樣來做

x^(~(1<<1))也就是         如果x=1000

x:                1010                 1000

1<<1:         0010                  0010

x^(1<<1) :  1000                  1010

當然我們可以用x^(3<<2)來把第3位和第4位取反

位運算的應用

1.對特定位清0 mask中的特定位為0,其餘位為1。s s mask 2.取某數中的指定位 mask特定位置1,其餘位0。常用來將源運算元某些位置1,其餘位不變 mask特定位置為1,其餘位為0。1.使特定位取反 mask特定位置1,其餘位為0 2.不引用第三方變數,交換值 a a b b a b...

位運算應用

位運算 針對整型 字元型,計算機會將它轉換為二進位制運算 1 按位與 x y 對應位都為1時才為1 用途 取 保留1個數的某位 對應掩碼的對應位為1 其餘各位置1 2 按位或 x y 對應位都為0才為0,否則為1 用途 將1個數的某些位置1,其餘不變 3 按位異或 x y 對應位相同為0,不同為1 ...

位運算應用

1.判斷乙個數的奇偶性。x 1 101 1 1 2.判斷x是否是2的正整數冪。x x 1 100 011 0 3.取出乙個數的某些二進位制位。3.1.x 1 d 1 10101 1 3 1 00100 取第d位 3.2.x 1 d 1 10101 1 3 1 00101 取最後d位,x對2 d取模 ...