這些運算子怎麼用,C語言位運算裡這些怎麼用?

2021-03-04 04:47:14 字數 4613 閱讀 8705

1樓:匿名使用者

我們都知道,資料在計算機裡是以二進位制形式表示的。在實際問題中,常常 也有一些資料物件的情況比較簡單,只需要乙個或幾個二進位制位就能夠編碼表示。如果在乙個軟體系統中這種資料物件非常多,用乙個基本資料型別表示,對計算機 資源是一種浪費。

另一方面,許多系統程式需要對二進位制位表示的資料直接操作,例如許多計算機硬體裝置的狀態資訊通常是用二進位制位串形式表示的,如果要對硬 件裝置進行操作,也要送出乙個二進位制位串的方式發出命令。由於c語言的主要設計目的是面向複雜的系統程式設計,所以它特別提供了對二進位制位的操作功能,稱 為位運算。   位運算應用於整型資料,即把整型資料看成是固定的二進位制序列,然後對這些二進位制序列進行按位運算。

與其它 高階語言相比,位運算是c語言的特點之一。但是由於位運算的應用涉及更深入和更廣泛的內容,初學者不必細究,在實際應用中可逐步體會其優越性。這部分內容 相對比較獨立,讀者可根據實際需要選擇學習。

本書僅對位運算及其應用作簡要的介紹。3.5.

1 位運算子  因為乙個二進位制位只能取值為0或者1,所以位運算就是從具有0或者1值的運算物件出發,計算出具有0或者1 值的結果。c語言提供了6種基本位運算功能:位否定、位與、位或、位異或、位左移和位右移。

其中除位否定是單目運算外,其餘5種均為雙目運算,6個位運算 符分為4個優先級別,參見表3-9。表3-9 邏輯運算子運算子 含義 運算物件個數 結合方向 優先順序~ 按位求反 單目運算子 自右向左 1<< 按位左移 雙目運算子 自左向右 2>> 按位右移 雙目運算子 自左向右 2& 按位與 雙目運算子 自左向右 3 | 按位或 雙目運算子 自左向右 4^ 按位異或 雙目運算子 自左向右 5說明:① 位運算的優先順序是:

~→<<、>>→&→|→^。② 位運算的運算物件只能是整型(int)或字元型(char)的資料。③ 位運算是對運算量的每乙個二進位制位分別進行操作。

3.5.2 按位邏輯運算  按位邏輯運算包括:

位與、位或、位異或和位否定等四種運算。為了幫助讀者理解,我們設a和b都是16位二進位制整數,它們的值分別是: a:

1010,1001,0101,0111 b: 0110,0000,1111,1011 為了便於閱讀,a和b中每4位用乙個逗號分開。以下介紹對於a和b的位與、位或、位異或和位否定等按位邏輯運算。

  1.按位與運算 (&) 按位與是對兩個運算量相應的位進行邏輯與,"&"的運算規則與邏輯與"&&"相同。 按位與表示式:

0010,0000,0101,0011  2.按位或運算(|) 按位或是對兩個運算量相應的位進行邏輯或操作,其運算規則與邏輯或"||"相同。 按位或表示式:

c=a|b a: 1010,1001,0101,0111 | b: 0110,0000,1111,1011 c:

1110,1001,1111,1111  3.按位異或運算(^) 按位異或運算的規則是:兩個運算量的相應位相同,則結果為0,相異則結果為1。

即: 0^0=0 0^1=1 1^0=1 1^1=0 按位異或表示式:c=a^b a:

1010,1001,0101,0111 ^ b: 0110,0000,1111,1011 c: 1100,1001,1010,1100 可見,異或運算的含義是:

兩個相應位的值相異,則結果為1,相同則為0。  4.按位求反運算子(~) 按位求反運算運算規則是將二進位制表示的運算物件按位取反,即將1變為0,將0變為1。

按位異或表示式:c=~a ~ a: 1010,1001,0101,0111 c:

0101,0110,1010,1000  5.按位邏輯運算的應用例3-8:設 int x=7,求y=~x y=~x=~7=~(0000,0000,0000,0111)=1111,1111,1111,1000=-8 可見,對x的值(7)按位求反結果恰為-8的補碼表示,其原因是計算機中有:

整數求負=整數求補=按位求反+1  所以:按位求反=整數求負-1。 請注意求反運算與單目減和邏輯非運算的區別:

y=-x;  結果為:y=-7, y=!x; 結果為:

y=0。  例3-9:用按位與運算遮蔽特定位(將指定位清為0)。

設 n=051652(八進位製數),計算m=n&0177,則:m=052。 n:

0,101,001,110,101,010 & 0177: 0,000,000,001,111,111 m: 0,000,000,000,101,010 經過位與運算,將n前9位遮蔽掉,即擷取n的後7位。

  例3-10:用按位與運算保留特定位。 要想將乙個變數n的特定位保留下來,只要設乙個數,使該數的某些位為1,這些位是與要保留的n的特定位相對應的位,再將n與該數按位與。

設 n=011050(為八進位製數。對應的二進位制為:0,001,001,000,101,000),要將n的右起第2、4、6、8、10位保留下來,只要 n=n&01252,則有:

n: 0,001,001,000,101,000 & 01252: 0,000,001,010,101,010 n:

0,000,001,000,101,000 (n=01050) 注意,按位與的"&"功能與取位址運算的"&"不同,儘管兩者採用了相同的符號。  例3-11:用按位或運算將指定的位置為1。

設:x=061,y=016,則z=a|b為: x:

0000,0000,0011,0001 | y: 0000,0000,0000,1110 z: 0000,0000,0011,1111 即將x或y中為1的位的相應位置成1,其結果是z中的後6位為1。

  例3-12:用按位異或運算將某個量的特定位翻轉。 要將變數n的特定位翻轉,即原來為1的變0,為0的變1,只要設乙個數,使該數的某些位為1,這些位是與n中要翻轉的相對應的位,然後將n與該數進行按位異或運算。

設:a=015,要將後四位翻轉,只要a=a^017,則: a:

0000,0000,0011,1101 ^ 017: 0000,0000,0011,1111 a: 0000,0000,0000,00103.

5.3 移位運算  c語言提供了兩個移位運算:左移和右移,它們是把整數作為二進位制位序列,求出把這個序列左移若干位或者右移 若干位所得到的序列。

左移和右移都是雙目運算,運算子左邊的運算物件是被左移或右移的資料,而運算子右邊的運算物件是指明移動的位數。資料左移或右移後空 出來的位置補0。 左移、右移運算表示式的一般形式為:

x << n 或 x >> n其中x為移位運算物件,是要被移位的量;n是要移動的位數。左移運算的規則是將x的二進位制位全部向左移動n位,將左邊移出的高位捨棄,右邊空出的位補0。右移是將x的各二進位制位全部向右移動n位,將右邊移出的低 位捨棄,左邊高位空出要根據原來量符號位的情況進行補充,對無符號數則補0;對有符號數,若為正數則補0,若為負數則補1。

  例如,設a=7,則:b=a<<2  即:b=0000,0111<<2=0001,1100=28c=a>>2  即:

c=0000,0111>>2=0000,0001=1左移的乙個特殊用途是將整數值乘以2的冪,例如:左移運算表示式1<<4的計算結果是16,右移可以用於將整數值除乘2的冪。3.

5.4 位運算賦值運算子  位運算子與賦值運算子可以組成以下5種位運算賦值運算子:&=、 |=、 >>=、 <<=、 ^=由這些位運算賦值運算子可以構成位運算賦值表示式。

例如:x&=y 相當於:x=x&yx<<=2 相當於:

x=x<<2x>>=3 相當於:x=x>>3x^=5 相當於:x=x^5

c語言位運算裡~、<<、>>、&、|、^、這些怎麼用?

2樓:與鯉

按位與 |    按位或 ^

按位異或 ~    取反 <<

左移 >>     右移<<

1. 按位與運算。按位與運算子"&"是雙目運算子。

其功能是參與運算的兩數各對應的二進位相與。只有對應的兩個二進位均為1時,結果位才為1 ,否則為0。參與運算的數以補碼方式出現。

2. 按位或運算。按位或運算子「|」是雙目運算子。

其功能是參與運算的兩數各對應的二進位相或。只要對應的二個二進位有乙個為1時,結果位就為1。參與運算的兩個數均以補碼出現。

例如:9|5可寫算式如下: 00001001|00000101 00001101 (十進位制為13)可見9|5=13 main()

3. 按位異或運算。按位異或運算子「^」是雙目運算子。

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

5. 左移運算。左移運算子「<<」是雙目運算子。

其功能把「<< 」左邊的運算數的各二進位全部左移若干位,由「<<」右邊的數指定移動的位數, 高位丟棄,低位補0。例如: a<<4 指把a的各二進位向左移動4位。

如a=00000011(十進位制3),左移4位後為00110000(十進位制48)。

C語言中算數運算子,關係運算子,邏輯運算子的優先級別

1級優先順序 左結合 圓括號 下標運算子 指向結構體成員運算子 運算高於關係高於邏輯高於付值 去看一下教材,譚浩強 第三版 c語言的運算子的優先順序 邏輯運算子 條件運算子 賦值運算子 關係運算子 算術運算子。它們之間的優先順序 1 最高端 出現同級別運算子時的結合方向是從左往右 下面級別沒寫結合順...

c語言邏輯運算子 關係運算子 算術運算子的優先順序是怎麼樣的

邏輯運算子裡的非運算 算術運算子 關係運算子 邏輯運算子裡的與運算 邏輯運算子裡的或運算 優先順序 算數運算 關係運算 邏輯運算。按等級高到低排列 1 非運算。2 算數運算子,例如a b,進行運算。版 3 關係運算子,例如a b,進行比 權較。4 和 也就是與運算和或運算。5 賦值運算子,例如a b...

C語言運算子都有那些,c語言中有哪些運算子,各有什麼功能?

運算子的種類c語言的運算子可分為以下幾類 1.算術運算子 用於各類數內值運算。包括加 減 乘容 除 求餘 或稱模運算,自增 自減 共七種。2.關係運算子 用於比較運算。包括大於 小於 等於 大於等於 小於等於 和不等於 六種。3.邏輯運算子 用於邏輯運算。包括與 或 非 三種。4.位操作運算子 參與...