位運算表示按二進制進行的運算。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二進制
位移運算符方法
位左移數據
左移運算的實質是將對應的數據的二進制值逐位左移若干位,並在空出的位置上填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。