C語言 位運算

2021-09-24 19:32:37 字數 1771 閱讀 2215

本文例子複製自文章:

首先如果你定義了乙個變數並賦值了乙個變數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,則該位...