使用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取模 ...