(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.去掉了最後乙...