運算子與表示式(三) 位運算子

2021-07-15 01:34:53 字數 1955 閱讀 3896

位運算子:&(按位與)  |(按位或)  ^(異或)  ~(取反)  <>(右移)

常量是有符號的,位操作中無符號數要進行強制型別轉換!

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語言的運算子多,一般記住...