C 的位運算子

2022-02-27 01:30:18 字數 1909 閱讀 5861

c#的位運算子&,| ,^ ,<<,>>2023年08月01日 星期五 15:52位 運 算

我們知道任何資訊在計算機中都是以二進位制的形式儲存的位操作符就是對數

據按二進位制位進行運算的操作符c#語言中的位操作符有

&與

|或 ^異或

~取補《左移

>> 右移

其中取補只有乙個運算元而其它的位操作符都有兩個運算元這些運算都不

會產生溢位位操作符的運算元為整型或者是可以轉換為整型的任何其它型別

與運算運算元按二進位制位進行與運算運算規則為

0&0=0

0&1=0

1&0=0

1&1=1

這說明除了兩個位均為1 與運算結果為1 其它情況下與運算結果均為0 比

如2 和10 進行與運算

2 的二進位制表示 00000010

10 的二進位制表示 00001010

與運算的結果 00000010

1 所以2&10 的結果為2

或運算運算元按二進位制位進行與運算運算規則為

0|0=0

0|1=1

1|0=1

1|1=1

這說明除了兩個位均為0 或運算結果為0 其它情況下或運算結果均為1 比

如2 和10 進行或運算

2 的二進位制表示 00000010

10 的二進位制表示 00001010

或運算的結果 00001010

所以2|10 的結果為10

異或運算

運算元按二進位制位進行與運算運算規則為

0^0=0

0^1=0

1^0=0

1^1=1

這說明當兩個位相同時異或運算結果為0 不相同時異或運算結果為1 比如

2 和10 進行異或運算

2 的二進位制表示 00000010

10 的二進位制表示 00001010

異或運算的結果 00001000

所以2^10 的結果為8

取補運算

取補運算對運算元的每一位取補如對10 取補結果為

10 的二進位制表示 00001010

與運算的結果 11110101

這個二進位制對應的具體值與資料型別有關下面的例子清楚地說明了這一點

程式清單7-5

using

system;

class

test

",~a);

console.writeline(

"ushort:

",~b);

console.writeline(

"int:

",~c);

console.writeline(

"uint:

",~d);

}}

正確的輸出是

-11short: -11

ushort: -11

int: -11

uint: 4294967285

移位運算

左移運算將運算元按位左移高位被丟棄低位順序補0 比如10 的二進位制為

00001010 左移一位為00010100 20 左移二位為00101000 40

右移運算時如果運算元x 是int 或long 型 時x 的低位被丟棄其它各位順序

依次右移如果x 是非負數最高位設成零如果x 為負數則最高位設為1 而當x

的型別為uint 或ulong 型時x 的低位將被丟棄其它各位順序依次右移高位設為0

比如程式清單7-6

using

system;

class

test

}

上面這段程式的輸出為164

10如果把上面x 的初始值設為-16 則程式的輸出為

-16-4

-1-1

C 位運算子

c 源自c,在提供高階語言便利的同時,也繼承了c在硬體程式設計方面的功能。因此適用於編寫裝置驅動和嵌入式大 c c 提供位邏輯運算子和移位運算子。二者只能用於整形和字元型。位運算子是對每位進行操作而不影響左右兩位,這有別於常規運算子 是將整個數進行操作的。一 位邏輯運算子 1 按位取反 將1變為0,...

C 位運算子

最近工作專案壓力不大,便繼續開始自學c 發現基礎知識忘記的差不多了.上網搜尋了一些基礎的不能再基礎的東西,溫故知新.c 位運算子 http www.diybl.com course 3 program c cppjs 20090403 163995.html c c 提供位邏輯運算子和移位運算子。二...

C 位運算子

位運算子作用於位,並逐位執行操作。和 的真值表如下所示 pq p qp q p q000 0001 0111 1110 1001 1假設如果 a 60,且 b 13,現在以二進位制格式表示,它們如下所示 a 0011 1100 b 0000 1101 a b 0000 1100 a b 0011 1...