導航:首頁 > 操作系統 > 單片機的位運算

單片機的位運算

發布時間:2024-06-22 03:27:47

A. 在單片機C語言中如何對變數的某一位進行操作或賦值。

在C語言中,一般有兩種方法來操作位,一種是使用C語言提供的位運算操作符,一種是使用位域。

1、使用位域

在C語言中定義位域的一般格式如下:

struct位域結構名
{位域列表};

struct:在C語言中定義位域所使用的關鍵字是struct。

位域結構名:是一個C語言中的標識符,有字母、數字、下劃線組成,而且第一個字元必須是字母或者下劃線。

位域列表:組其中位域列表的形式為: 類型說明符 位域名:位域長度

下面的示例代碼,通過位域來計算IEEE754浮點數編碼中單精度數的最大值 、最小值和最小弱規范數。

#include<stdio.h>
typedefstructFP_SINGLE
{
unsigned__int32fraction:23;
unsigned__int32exp:8;
unsigned__int32sign:1;
}fp_single;
intmain()
{
floatx;
fp_single*fp_s=(fp_single*)&x;
fp_s->sign=0;
fp_s->exp=0xfe;
fp_s->fraction=0x7fffff;
printf("float最大數:%le ",(double)x);
fp_s->sign=0;
fp_s->exp=0x1;
fp_s->fraction=0x0;
printf("float最小數:%le ",(double)x);
fp_s->sign=0;
fp_s->exp=0;
fp_s->fraction=0x1;
printf("float最小弱規范數:%le ",(double)x);
return0;
}

2、使用位運算符

C語言中的位運算符有一個基本的常識,即只能操作整數,不能操作浮點數,因為浮點數是使用IEEE754編碼的,使用位操作數沒有任何意義。

C語言提供的位運算符列表:
&按位與如果兩個相應的二進制位都為1,則該位的結果值為1,否則為0
|按位或兩個相應的二進制位中只要有一個為1,該位的結果值為1
^按位異或若參加運算的兩個二進制位值相同則為0,否則為1
~取反~是一元運算符,用來對一個二進制數按位取反,即將0變1,將1變0
<<左移用來將一個數的各二進制位全部左移N位,右補0
>>右移將一個數的各二進制位右移N位,移到右端的低位被舍棄,對於無符號數,高位補0

B. 單片機 C語言中 ^是啥意思

^ 這是按位異或運算,屬於算術運算。
按位運算的邏輯是:相同位置的位,按相同出0,不同出1的方法,進行對齊的位運算,如 0x55 ^0x69:
0101 0101(0x55)
0110 1001(0x69)
————————
0011 1100(0x3c)

C. 在8位單片機如何實現16位運算

如果你是用C編譯器,那麼根本就不用考慮這個問題,因為編譯器都為你解決了,你只需要定義16位的變數(如int型)
但如果你是用匯編語言寫程序,那麼就得為程序分配內存單元(字型變數),利用四個或四個以上的八位寄存器,先低八位進行運算,然後進行高八位的運算,但其中要注意狀態寄存器的變化。

D. 單片機機 中怎樣和哪幾種位元組位操作的方式,最好給點C語言代碼並解釋

1、ANSIC中,一般採用「讀-修改-寫」的方法實現單個位的位操作,通過與0「與」操作,將某一位清0。如使i變數的b0位為0,實現方法為i=i&0xfe。通過與1「或」操作,將某一位置1。如使i變數的b0位為1,實現方法為i=i|0x01。通過與1「異或」操作,將某一位取反。如使i變數的b0位取反,實現方法為i=i^0x01。

2 、通過位域的方法實現位操作
標准C提供了一種基於結構體的數據結構--位域(BitField),位域就是把一個存儲單元中的二進制劃分為幾個不同的區域。並說明每個區域的位數。每一個域有一個域名,允許在程序中按域名進行操作,位域的定義格式如下:
struct 位域結構名{

位域列表 };

位域列表格式為:類型說明符 位域名:位域長度如:

struct k{

unsigned int a:1

unsigned int :2

unsigned int b:3

unsigned int :0 //空域

}k1;
說明:
1)各位依次從低位到高位排列,排滿一個存儲單元,按地址接著排下一單元;
2)位域可以無域名,但不能被引用,如第二域,這時其只用來填充或調整位置;
3)第四行稱空域,目的是將目前存儲單元的剩餘部分分為一個域,且填充0。
位域的引用很簡單,如:
k1.a=1; //置k1的b0位為1
k1.b=7; //將k1的b3-5位置111
通過位域定義位變數,是實現單個位位操作的重要途徑和方法,採用位域定義位變數,產生的代碼緊湊、高效。

E. 51單片機匯編語言:位操作指令有哪些

數據位傳送指令
MOV C, bit ;bit 可直接定址位 C←(bit)
MOV bit,C ;C 進位位 (bit) ← C

位變數修改指令
CLR C ; 將C=0
CLR bit
CPL C ; 將C求反再存入C
CPL bit ; 將bit求反再存入bit
SETB C ; 將C=1
SETB bit ; (bit) ← 1

位變數邏輯指令
ANL C, bit ANL C, bit ORL C, bit ORL C, bit

F. 單片機系統指令的位操作指令

一、數據位傳送指令
MOV C,bit
MOV bit,C
如MOV C,06H ;(20H).6→Cy
06H是內部RAM 20H位元組位6的位地址。
MOV P1.0,C ;Cy→P1.0
可定址位的具體定義:從20H單元的第一位開始一直到2FH單元的最後一位分別為00H~7FH以及特殊功能寄存器中80H~F7H。
二、位變數修改指令
CLR C ;清「0」Cy
CLR bit ;清「0」bit位
CPL C ;Cy求反
CPL bit ;bit位求反
SETB C ;置「1」 Cy
SETB bit ;置「1」bit位
三、位變數邏輯與指令
ANL C,bit ;bit ∧Cy →Cy
ANL C,/bit; ;/ bit ∧Cy →Cy
四、位變數邏輯或指令
ORL C,bit ;bit ∨ Cy →Cy
ORL C,/bit ;/ bit ∨ Cy →Cy
五、條件轉移類指令
JC rel ;如果進位位Cy=1,則轉移
JNC rel ;如果進位位Cy=0,則轉移
JB bit,rel ;如果直接定址位=1,則轉移
JNB bit,rel ;如果直接定址位=0,則轉移
JBC bit,rel ;如果直接定址位=1,則轉移,並對bit位清0

閱讀全文

與單片機的位運算相關的資料

熱點內容
bp演算法源代碼 瀏覽:646
發票伺服器怎麼選 瀏覽:385
哪個app陪伴運動 瀏覽:880
學編程每天六點起床 瀏覽:952
烏鴉搜索演算法復現 瀏覽:75
android3d切換 瀏覽:751
資源管理器選定文件夾 瀏覽:989
分數公約數的演算法 瀏覽:589
yii2引入php文件 瀏覽:564
華為p20方舟編譯器評測 瀏覽:187
pntp伺服器是什麼 瀏覽:654
程序員培訓多長時間 瀏覽:557
求aaa的和python 瀏覽:194
python因子分析代碼 瀏覽:647
python啟動時提示沒有入口 瀏覽:681
linux中oracle監聽 瀏覽:622
程序員高價值朋友圈 瀏覽:489
雲伺服器做淘寶店 瀏覽:804
程序員判3年緩3年 瀏覽:912
伺服器雲監控系統 瀏覽:653