c語言的按位或,與,非運算子

2021-09-07 22:32:28 字數 2170 閱讀 5725

位運算子

c提供了六種位運算運算子;這些運算子可能只允許整型運算元,即char、short、int和long,無論signed或者unsigned。

& 按位and

| 按位or

^ 按位異或

<< 左移

>> 右移

~ 求反(一元運算)

按位與操作&通常用於掩去某些位,比如

n = n & 0177;

使得n中除了低7位的各位為0。

按位或操作|用於開啟某些位:

x = x | set_on;

使得x的某些set_on與相對的位變為1。

按位異或操作^使得當兩個運算元的某位不一樣時置該位為1,相同時置0。

應該區分位操作符&、|與邏輯操作符&&、||,後者從左到右的評價乙個真值。比如,如果x為1、y為2,那麼x & y為0,而x && y為1。

移位運算子《和》將左側的運算元左移或者右移右運算元給定的數目,右運算元必須非負。因此x << 2將x的值向左移動兩位,用0填充空位;這相當於乘4。右移乙個無符號數會用0進行填充。右移乙個帶符號數在某些機器上會用符號位進行填充(「算數移位」)而在其他機器上會用0進行填充(「邏輯移位」)。

單目運算子~對乙個整數求反;即將每乙個1的位變為0,或者相反。比如

x = x & ~077

將x的後六位置0。注意x & ~077的值取決於字長,因此比如如果假設x是16位數那麼就是x & 0177700。這種簡易型式並不會造成額外開銷,因為~077是乙個常數表示式,可以在編譯階段被計算。

作為乙個使用位操作的例項,考慮函式getbits(x,p,n)。它返回以p位置開始的n位x值。我們假設0位在最右邊,n和p是正數。例如,getbits(x,4,3)返回右面的4、3、2位。

/* getbits: 返回從位置p開始的n位 */

unsigned getbits(unsigned x, int p, int n)

表示式x >> (p+1-n)將需要的域移動到字的右側。~0是全1;將其左移n為並在最右側填入0;用~使得最右側n個1成為掩碼。

c語言的按位運算子

& 按位與 | 按位或 ^ 按位異或

1. 按位與運算 按位與運算子"&"是雙目運算子。其功能是參與運算的兩數各對應的二進位相與。只有對應的兩個二進位均為1時,結果位才為1 ,否則為0。參與運算的數以補碼方式出現。 例如:9&5可寫算式如下: 00001001 (9的二進位制補碼)&00000101 (5的二進位制補碼) 00000001 (1的二進位制補碼)可見9&5=1。 按位與運算通常用來對某些位清0或保留某些位。例如把a 的高八位清 0 , 保留低八位, 可作 a&255 運算 ( 255 的二進位制數為0000000011111111)。 main() 2. 按位或運算 按位或運算子「|」是雙目運算子。其功能是參與運算的兩數各對應的二進位相或。只要對應的二個二進位有乙個為1時,結果位就為1。參與運算的兩個數均以補碼出現。 例如:9|5可寫算式如下: 00001001|00000101 00001101 (十進位制為13)可見9|5=13 main()

3. 按位異或運算 按位異或運算子「^」是雙目運算子。其功能是參與運算的兩數各對應的二進位相異或,當兩對應的二進位相異時,結果為1。參與運算數仍以補碼出現,例如9^5可寫成算式如下: 00001001^00000101 00001100 (十進位制為12) main()

4.按位異或運算子^   參與運算的兩個值,如果兩個相應位相同,則結果為0,否則為1。即:          0^0=0, 1^0=1, 0^1=1, 1^1=0   例如:     10100001^00010001=10110000

0^0=0,0^1=1  0異或任何數=任何數

1^0=1,1^1=0  1異或任何數-任何數取反

任何數異或自己=把自己置0   (1)按位異或可以用來使某些特定的位翻轉,如對數10100001的第2位和第3位翻轉,可以將數與00000110進行按位異或運算。           10100001^00000110=10100111 //1010 0001 ^ 0x06 = 1010 0001 ^ 6   (2)通過按位異或運算,可以實現兩個值的交換,而不必使用臨時變數。例如交換兩個整數a,b的值,可通過下列語句實現:     a=10100001,b=00000110     a=a^b;   //a=10100111     b=b^a;   //b=10100001     a=a^b;   //a=00000110    (3),在組合語言中經常是變數置零:

C語言按位運算子

c語言按位運算子 二進位制反碼或按位取反 一元運算子 是逐位將1變為 0,0變為 1eg 1001 1010 result 0110 0101 按位與 二元運算子 是逐位比較兩個運算物件,生成乙個新值 對每乙個位上來說,只有當全為 1時,才為 1,否則為 0 也就是全真為真,一假則假 eg 1001...

c語言的按位運算子

按位與 按位或 按位異或 1.按位與運算 按位與運算子 是雙目運算子。其功能是參與運算的兩數各對應的二進位相與。只有對應的兩個二進位均為1時,結果位才為1 否則為0。參與運算的數以補碼方式出現。例如 9 5可寫算式如下 00001001 9的二進位制補碼 00000101 5的二進位制補碼 0000...

JS按位非 運算子與 運算子的理解

其實是一種利用符號進行的型別轉換,轉換成數字型別 true 1 false 0 0 0 undefined 0 undefined 1 null 0 null 1 按位非運算子,簡單的理解就是改變運算數的符號並減去1,當然,這是只是簡單的理解能轉換成number型別的資料 那麼,對於typeof v...