C語言學習點滴(四)

位運算表示按二進制進行的運算。spa

位運算首先理解二進制。二進制是指數字的每一位都是0或者1code

位運算操做符<<(右移運算符) \ >>(左移運算符) 
io

與(&)   0 & 0 = 0    1 & 0 = 0       0 & 1 = 0     1 & 1 = 1class

或(|)      0 | 0 = 0      1 | 0 = 1        0 | 1 = 1        1 | 1 = 1變量

異或(^) 0 ^ 0 = 0     1 ^ 0 = 1       0 ^ 1 = 1      1 ^ 1 = 0二進制

  1. 位移運算符方法

    位左移數據

    左移運算的實質是將對應的數據的二進制值逐位左移若干位,並在空出的位置上填0,最高位溢出並捨棄計算機

例:
int a,b;
a = 5;
b =a<<2;       //a向左移動2位  
// a的二進制  00000101   向左移動2位就是  00010100 即b=20;

你們也許在這裏會以爲很難計算,我說個我看到過的一個計算方法移動

二進制中左邊多一位表示2的1次方 多2位表示2次方,依次計算

若是往左邊移動幾位那就乘以多少個2就好了

int a=85,b;
b=a<<3;
//a的二進制是 00000000 01010101  往左移動三位 00000101 01010000
這裏b的值 = 85×2×2×2  = 680
你們能夠用計算機算一下

2.右移運算符

  這裏同左移運算符相反,是將對應的數據的二進制值逐位右移若干位,並在空出的位置上填0,最高位補0

例:
int a, b;
a=5;
b=a>>2;
 //a向左移動2位  00000101     00000001
//則b=1

咱們也能夠用上面的方法來計算只不過只是除法


//當最高位是1,則根據計算機的系統,處理方式不一

複合運算

運算符 含義 描述
& 按位與 若是兩個相應的二進制位都爲1,則該位的結果值爲1,不然爲0
| 按位或 兩個相應的二進制位中只要有一個爲1,該位的結果值爲1
^ 按位異或 若參加運算的兩個二進制位值相同則爲0,不然爲1
~ 取反 ~是一元運算符,用來對一個二進制數按位取反,即將0變1,將1變0
一、「按位與」運算符(&)

   是指參加運算的的倆兩個數據,按照二進制進行「與」運算,若是兩個相應的二進制都位1,則該位的結果爲1.不然爲0

按位與運算 例:
 00000011(3)
&00000101 (5)
 00000001 (1)
 
 由此得知3&5=1
 
 咱們能夠用位與對存儲單元清0
 #include <stdio.h>
 int main()
 {
     int a=5;
     a &= 0x00;
     return 0;
 }

按位或」運算符(|)
兩個相應的二進制位中只要有一個爲1,該位的結果值爲1。借用邏輯學中或運算的話來講就是,一真爲真


異或」運算符(^)
他的規則是:若參加運算的兩個二進制位值相同則爲0,不然爲1

應用:
(1)使特定位翻轉
設有數01111010(2),想使其低4位翻轉,即1變0,0變1.能夠將其與00001111(2)進行「異或」運算,

即:
 01111010
^00001111
 01110101
運算結果的低4位正好是原數低4位的翻轉。可見,要使哪幾位翻轉就將與其進行∧運算的該幾位置爲1

便可。
(2) 交換兩個值,不用臨時變量
例如:a=3,即11(2);b=4,即100(2)。
想將a和b的值互換,能夠用如下賦值語句實現:
    a=a∧b;
    b=b∧a;
    a=a∧b;
a=011(2)
    (∧)b=100(2)
a=111(2)(a∧b的結果,a已變成7)
    (∧)b=100(2)
b=011(2)(b∧a的結果,b已變成3)
    (∧)a=111(2)


a=100(2)(a∧b的結果,a已變成4)


四、「取反」運算符(~)
他是一元運算符,用於求整數的二進制反碼,即分別將操做數各二進制位上的1變爲0,0變爲1。

相關文章
相關標籤/搜索