位運算子:&(按位與) |(按位或) ^(異或) ~(取反) <>(右移)
常量是有符號的,位操作中無符號數要進行強制型別轉換!
1. 按位與(兩者都為1結果才為1,有0結果必為0)
應用:
清零特定位:(mask中特定位置0,其他位為1,s = s & mask;)
取某數指定位:(mask中特定位置1,其他位為0,s = s & mask;)
2. 按位或(兩者都為0結果才為0,有1結果必為1)
應用:
將源運算元某些位置1,其餘位不變(mask中特定位置1,其他位為0,s = s | mask;)
3.異或(兩者不同為1,相同為0)
應用:
使特定位的值取反(mask中特定位置1,其他位為0,s = s ^ mask;)
不引入第三變數,交換兩個變數的值(三種)
1) a = a + b; b = a – b; a = a – b;不適用於兩個大數交換,會導致越界
2) a = a * b; b = a / b; a = a / b;不適用於有0的兩數交換
3) a = a ^ b; b = a ^ b; a = a ^ b;建議使用,效率高
4. 左移
高位丟棄,低位補0
5. 右移
對於無符號數:高位補0,低位丟棄
對於有符號數:正數高位補
0,負數高位補0或補
1由編譯系統規定(
gcc中右移補1)
6. c語言效能優化:使用位運算
使用位運算減少除法和取模的運算,在計算機中資料的位是可以操作的最小資料單位,理論上可以用位運算來完成所有的運算和操作。一般的位操作是用來控制硬體的,或者進行資料交換,靈活的位操作可以有效地提高程式執行的效率。
7. 進製轉換:
十進位制轉二進位制顯示:
方法一:
方法二:
十進位制轉十六進製制顯示:
8. 掩碼mask
什麼是掩碼?
掩碼是一串二進位制**對目標字段進行位與運算,遮蔽當前的輸入位。將原始碼與掩碼經過按位運算或邏輯運算
得出新的運算元
。其中要用到按位運算如or運算和and運算。用於如將ascii碼中大寫字母改作小寫字母
m到n位置1計算公式:
1. mask =(unsigned int)((~(unsigned int)0) >> (32 – (n – m + 1))) << m;
2. for(i = 0; i <= m; i++)
mask1 = 2 * mask;
for(i = 0; i mask2 = 2 * mask;
mask = mask1 – mask2;
mask = int2bin(mask);
三位運算子 三位運算子的便捷性
三位運算子的便捷性 double values userservice.selectall dateutil.formatdatetostring calendarnow00.gettime yyyy mm dd hh mm code1,code2 data.setcurrentvalue valu...
三 運算子 表示式
三 運算子 表示式 1.i i的區別 i 是先對 i操作,再對i執行 1 i是先執行 1,將值賦給 i後,再對 i操作 2.邏輯運算子使用需要注意什麼 與或 非 3 7 4 ture 錯誤,因為3 7 判斷為true,true 隱式轉換為 1,因此程式判斷為正確,邏輯判斷錯誤。3 7 7 4 fal...
運算子與表示式
學習c語言時,在我們已經學習了型別,常量與變數,接下來就是通過學習運算子與表示式對型別,常量與變數進行運算。簡單說一下概念,用來對資料進行運算的符號,就可以稱為運算子。c中運算子和資料構成的式子,就稱為表示式。表示式再在其後加乙個分號,即構成c 語言語句。先說一下運算子吧。c語言的運算子多,一般記住...