C 語言中的位操作

2021-10-03 14:17:22 字數 1362 閱讀 4364

在微控制器或是工業控制中,位操作是很常見的,利用微控制器實現跑馬燈的例項就可以通過位操作來實現。c 語言中也能夠實現位操作。

微操作是針對資料的二進位制補碼形式的操作,位操作符主要有:

位運算子含義&

與|或~

非^異或<<  >>

左移  右移

&=  |=  ^=  <<=  >>=

與等  或等  異或等  左移等  右移等

可以用下邊的類似程式實現二進位制的輸出:

#include #define length 16

typedef short data;

void bin_print(data a)

}int main()

微控制器中總是要把某些位清零或置位,這些是用掩碼實現的,掩碼可以實現:

比如下面的程式:

#include void bin_print(char a)

int main()

結果是:

01010101

00111100

00010100

01111101

01101001

上邊提到過,左移是高位溢位,低位補 0,邏輯右移是高位補 0,低位捨棄。也可以實現將捨棄的位迴圈到另外一端:

#include #define length 16

typedef short data;

void bin_print(data a)

}data circle_move(data a,data n)

int main()

之前我們說到如果要交換兩個引數的值的話,會使用下面的方法:

int a = 3,b = 4,tmp;

tmp = a;

a = b;

b = tmp;

但是上述的方法多出了乙個引數,增加了開銷。也可以採用下面的方法:

int a = 3,b = 4;

a = a + b;

b = a - b;

a = a - b;

但是上述的方法進行了相加操作,求和容易發生溢位風險。也可以採用下面的方法:

int a = 3,b = 4;

a = a^b;

b = a^b;

a = a^b;

上面的方法利用了乙個性質:xy

x^y000

1010

1111

0從上邊的表中可以看出,x,y,x^y 之間可以通過異或實現進行互相轉換。

C語言中位操作

0 0 0 0 1 0 1 0 0 1 1 1 0 0 0 0 1 1 1 0 1 1 1 1 1.不改變其他位的值的狀況下,對某幾個位進行設值。先對需要設定的位用 操作符進行清零操作,然後用 操作符設值。比如我要改變 gpioa 的狀態,可以先對暫存器的值進行 清零操作 gpioa crl 0xf...

C語言中的位操作

目錄 1.前言 2.數值在計算機中的表示 3.位運算 4.位段 正文 1.前言 為了節省記憶體空間,在系統軟體中常將多個標誌狀態簡單地組合在一起,儲存到乙個位元組 或字 中。語言是為研製系統軟體而設計的,所以她提供了實現將標誌狀態從標誌位元組中分離出來的位運算功能。所謂位運算是指,按二進位制位進行的...

學習C語言中的位操作

最近在寫程式時,我需要判斷乙個dword 型別變數的某乙個二進位制位是否為1或0,我們都很清楚,dword型別的變數在記憶體中佔32位,現在要我們判斷其中的某一位是0還是1,該如何是好呢?這時我想到了c語言中的位操作,借助位操作,可以實現我們想要的功能。關於位操作,我從網上收集整理的資料如下 一 位...