位運算 知識點

2021-08-22 09:53:17 字數 1556 閱讀 9009

1. 按位與(&)

位運算實質是將參與運算的數字轉換為二進位制,而後逐位對應進行運算。

按位與運算為:兩位全為1,結果為1,即1&1=1,1&0=0,0&1=0,0&0=0。

例如51 & 5 -> 00110011 & 00000101 = 00000001 -> 51 & 5 = 1

特殊用法:

(1)與0相與可清零。

(2)與1相與可保留原值,可從乙個數中取某些位。例如需要取10101110中的低四位,10101110 & 00001111 = 00001110,即得到所需結果。

2. 按位或(|)

兩位只要有一位為1,結果則為1,即1|1=1,1|0=1,0|1=1,0|0=0。

特殊用法:

(1)與0相或可保留原值。

(2)與1相或可將對應位置1。例如,將x=10100000的低四位置1,使x | 00001111 = 10101111即可。

3. 異或運算(^)

兩位為「異」,即一位為1一位為0,則結果為1,否則為0。即1^1=1,1^0=0,0^1=0,0^0=1。

特殊用法:

(1)使指定位翻**找乙個數,對應x要翻轉的各位為1,其餘為0,使其與x進行異或運算即可。例如,x=10101110,使低四位翻轉,x ^ 00001111 = 10100001。

(2)與0相異或保留原值。例如x ^ 00000000 = 10101110。

(3)交換兩變數的值。(比借助容器法、加減法效率高)原理:乙個數對同乙個數連續兩次進行異或運算,結果與這個數相等。

因此,交換方法為:a = a ^ b,b = a ^ b,a = a ^ b。

4. 取反(~)

將乙個數按位取反,即~ 0 = 1,~ 1 = 0。

5. 左移(<<)

將乙個數左移x位,即左邊丟棄x位,右邊用0補x位。例:11100111 << 2 = 10011100。

拓展:

==原碼==:乙個整數按照絕對值大小轉換為二進位制即為原碼;

==反碼==:將二進位制數按位取反,得到的即為反碼;

==補碼==:反碼加1即為補碼。

==由於計算機底層硬體的限制,負數均使用補碼表示。==

若左移時捨棄的高位全為0,則每左移1位,相當於該數十進位制時乘一次2。

例:11(1011) << 2 = 44(11表示為1011時實際上不完整,若計算機中規定整型的大小為32bit,則11的完整二進位制形式為00000000 00000000 0000000 00001011)

6. 右移(>>)

將乙個數右移若干位,右邊捨棄,正數左邊補0,負數左邊補1。每右移一位,相當於除以一次2。

例:4 >> 2 = 1,-14 >> 2 = -4。

7. 無符號右移(>>>)

將乙個數右移若干位,左邊補0,右邊捨棄。

例:-14 >>> 2 = (11111111 11111111 11111111 11110010) >>> 2 = (00111111 11111111 11111111 11111100) = 1073741820

關於位操作的知識點

1.1位操作與邏輯操作 位操作不同於邏輯操作,邏輯操作是一種整體的操作,而位操作是針對內部資料補 碼的操作。邏輯操作的世界裡,只有真與假 零和非零 而位操作的世界裡按位論真 假 1 和 0 1.2二進位制列印 如下 void itobs int data putchar 10 1.3位操作有三種 按...

運算子與表示式(包含少量位運算知識點)

c的運算子和表示式 運算子和表示式 1 英文本母 2 數字字元 3 運算子 按運算物件的數目 1 單目運算子 2 雙目運算子 3 三目運算子 按照其功能 1.算術運算子 2.賦值運算子 3.關係運算子 4.邏輯運算子 5.位運算子 6.自增自減運算子 7.條件運算子 8.逗號運算子等等 結果是最後乙...

移位運算子知識點

對資料在記憶體的中表示,進行按位移動,以此來達到計算目的的運算子。移位操作的變數自身不改變。對char型別資料進行移位運算時會對它的ascii碼值進行操作。對byte short或者char型別資料進行移位操作時,會先把它們自動 公升級 為int後再進行運算。左移運算子,每移動一位,相當於擴大2倍....