本文例子複製自文章:
首先如果你定義了乙個變數並賦值了乙個變數a
int a=20;
它在記憶體中的儲存形式是以二進位制的形式來儲存的,那麼它的值是10100.
(正數是以二進位制的形式儲存,負數是以二進位制補碼的形式儲存)
c語言的位運算子有六個:
按位與 & :
在1與0的&運算中,只有1&1=1,其他的都得0.
將10與-10進行按位與(&)運算:
0000 0000 0000 1010
1111 1111 1111 0110
-----------------------
0000 0000 0000 0010
所以:10 & -10 = 0000 0000 0000 0010
按位或 | :
在1與0的|運算中,只有0|0=0,其他都得1
將10與-10進行按位或(|)運算:
0000 0000 0000 1010
1111 1111 1111 0110
-----------------------
1111 1111 1111 1110
所以:10 | -10 = 1111 1111 1111 1110
按位異或 ^ :
在1與0的^運算中,兩個相同的數相互^都等於0,不同的數相互^都為1
將10與-10進行按位異或(^)運算:
0000 0000 0000 1010
1111 1111 1111 0110
-----------------------
1111 1111 1111 1100
所以:10 ^ -10 = 1111 1111 1111 1100
取反 ~ :
也就是將二進位制的0變成1 , 1變成0,。
對10進行取反(~)運算:
0000 0000 0000 1010
---------------------
1111 1111 1111 0101
所以:~10 = 1111 1111 1111 0101
左移 <<:
將二進位制向左運算n個位數。
對10左移2位:
0000 0000 0000 1010
--------------------
0000 0000 0010 1000
所以:10 << 2 = 0000 0000 0010 1000 = 40
右移 >> :
將二進位制向右運算n個位數。
對10右移2位(就相當於在左邊加2個0):
0000 0000 0000 1010
--------------------
0000 0000 0000 0010
所以:10 >> 2 = 0000 0000 0000 0010 = 2
左移一位相當於 x2 ,右移一位相當於 ÷2
不管是右移還是左移,如果越界了就會被拋棄,然後自己的位會被填充。
左移: 填充0
右移: 無符號:填充0 , 有符號: 正數填充0,負數填充1**
位運算不適用於實數,僅僅適用於整數與字元。
如果進行位運算的數的型別不同,那麼會自動進行型別轉換(小型別轉換成大型別)
如果進行位運算的為無符號常量或變數,那麼會連符號位一起運算。
c語言位運算
c語言提供的位運算子列表 運算子 含義 描述 按位與 如果兩個相應的二進位制位都為1,則該位的結果值為1,否則為0 按位或 兩個相應的二進位制位中只要有乙個為1,該位的結果值為1 按位異或 若參加運算的兩個二進位制位值相同則為0,否則為1 取反 是一元運算子,用來對乙個二進位制數按位取反,即將0變1...
C語言位運算
c語言位運算 位運算應用口訣 清零取反要用與,某位置一可用或 若要取反和交換,輕輕鬆鬆用異或 移位運算 1 它們都是雙目運算子,兩個運算分量都是整形,結果也是整形。2 am p 3 amp amp amp qu ot 右 移 右邊 的位被擠 掉。對於 左邊移出 的空位,如果是正 數則空位 補0,若 ...
C語言位運算
位運算是指按二進位制進行的運算。在系統軟體中,常常需要處理二進位制位的問題。c語言提供了6個位操作 運算子。這些運算子只能用於整型運算元,即只能用於帶符號或無符號的char,short,int與long型別。c語言提供的位運算子列表 運算子 含義 描述 按位與 如果兩個相應的二進位制位都為1,則該位...