位運算應用口訣
清零取反要用與,某位置一可用或
若要取反和交換,輕輕鬆鬆用異或
<< >> >>>
左移乘2,右移除2,無符號右移
&a&1判斷最後1位/判斷奇偶
^同0異1,a&b無進製相加
~負數=add(~a,1)
優先順序描述
運算子1
括號()、
2正負號
+、-3
自增自減,非
++、--、!
4乘除,取餘
*、/、%5加減
+、-6
移位運算
<<、>>、>>>
7大小關係
>、>=、<、<=
8相等關係
==、!=
9按位與&10
按位異或^11
按位或|
12邏輯與
&&13
邏輯或||
14條件運算
?:15
賦值運算
=、+=、-=、*=、/=、%=
16位賦值運算
&=、|=、<<=、>>=、 >>=
左移與右移--<<(左移乘2)與》(右移除2)
a a*2
a>>n <=> a/(2^n) 例如:a>>1 <=> a/2
1>>n <=>
2^n
按位與-- &
1 清零特定位 (mask中特定位置0,其它位為1,s=s&mask)
例:將char型變數a的最低位置0:a=a&0376=a&11111110
2 取某數中指定位 (mask中特定位置1,其它位為0,s=s&mask)
例:char c;short int a;取出a的低位元組放在c中:c=a&0377=a&0000000011111111
a%(2^n) <=> a&(2^n-1)
a&1 ===>判斷a的最後1位是0還是1,也可判斷奇偶(如果a最後一位為1就輸出1,最後一位為0就輸出0)
例如:a%2<=> a&1, 其中,a&1==0表示a為偶數,a&1==1表示a為奇數(」0偶1奇「)
a%4 <=> a&3
a%8 <=> a&7
a%16 <=> a&15
按位或-- |
常用來將源運算元某些位置1,其它位不變。 (mask中特定位置1,其它位為0 s=s|mask)
例:a=a|oxff=a|0000000011111111
位異或-- ^
1 使特定位的值取反 (mask中特定位置1,其它位為0 s=s^mask)
2 不引入第三變數,交換兩個變數的值
void swap(int x , int y){
x ^= y; y ^= x; x ^= y;
注意:a^a=0 , a^0=a
按位取反--~
add(~a,1) *****>負數 等價於 a取反加1
~1不是-1,而是-2
C語言 位運算相關總結
1.位運算符號 取反,不分正負數 標準規定在右邊補0 正數則左邊補0,負數標準沒有規定在左邊補充的數字,分為邏輯右移和算術右移,具體由編譯器決定,windows平台和gcc採取算術右移即負數補1 2.常見的二進位制位的變換操作 去掉最後一位 101101 10110 x 1 在最後加乙個0 1011...
C 中的位運算
程式中的所有數在計算機記憶體中都是以二進位制的形式儲存的。位運算就是直接對整數在記憶體中的二進位制位進行操作。在c 中可以對整型運算物件按位進行邏輯運算 c 支援的位邏輯運算子如下所示 1.位邏輯非 是乙個單目運算子,只有乙個運算物件。0變成1,1變成0。例如 二進位制1000 1101 進行位邏輯...
c 中位運算的一些總結
倘如我們要算a ba b ab,平常只能想到跑乙個for迴圈,乙個乙個的累乘。然而我們可以利用二進位制的思想將b拆開。例 b為11,可拆成 23 21 20 2 3 2 1 2 0 23 21 20 這樣a ba b ab就等於a23 a21 a20 a a a a23 a2 1 a2 0然後我們可...