在匯編語(yǔ)言中有直接對(duì)位進(jìn)行操作的指令,如置位、復(fù)位、位取反、測(cè)試某一位等,這對(duì)于硬件操作十分方便,在C語(yǔ)言中盡管也提供了一些位操作手段,如按位與、按位或、按位取反等,但它們是對(duì)一個(gè)字節(jié)進(jìn)行操作,如要對(duì)具體的一位操作,仍舊不方便,以下給出了一些函數(shù),可以模仿匯編語(yǔ)言的一些位操作功能。
#define uchar unsigned char
/*測(cè)試變量某一位是否為‘1’,是返回真,否返回假,num為待測(cè)試的數(shù),bit為位數(shù),其值從0到7,下同*/
uchar bittest(uchar num,uchar bit)
{ if(num》》bit&0x01==1)
return 1;
else
return 0;
}
uchar bitclr(uchar num,uchar bit) /*清除某一位*/
{
uchar bit_value[]={1,2,4,8,16,32,64,128};
return num&~bit_value[bit];
}
uchar bitset(uchar num,uchar bit) /*設(shè)置某一位*/
{
uchar bit_value[]={1,2,4,8,16,32,64,128};
return num|bit_value[bit];
}
uchar bitcpl(uchar num,uchar bit) /*取反某一位*/
{
uchar bit_value[]={1,2,4,8,16,32,64,128};
if(num》》bit&0x01==1)
return num&~bit_value[bit];
else
return num|bit_value[bit];
}
/*以下主程序演示,調(diào)用時(shí),可以直接給出數(shù)值,也可以給出變量名*/
void main(void)
{
uchar xx=0xfe;
xx=bitset(xx,0);
printf(“The set out is %x ”,xx);
printf(“The clr out is %x ”,bitclr(255,0));
printf(“The test out is %x ”,bittest(0xff,0));
printf(“The cpl out is %x ”,bitcpl(0x00,7));
}
-
C語(yǔ)言
+關(guān)注
關(guān)注
183文章
7644瀏覽量
145596 -
程序
+關(guān)注
關(guān)注
117文章
3846瀏覽量
85240 -
運(yùn)算
+關(guān)注
關(guān)注
0文章
132瀏覽量
26716
發(fā)布評(píng)論請(qǐng)先 登錄
請(qǐng)問(wèn)單片機(jī)開(kāi)發(fā)的程序設(shè)計(jì)語(yǔ)言主要有哪幾種?
C語(yǔ)言主要特點(diǎn)
C語(yǔ)言嵌入式系統(tǒng)編程注意事項(xiàng)-內(nèi)存操作
為什么單片機(jī)還在用C語(yǔ)言編程?
第4章 C語(yǔ)言基礎(chǔ)以及流水燈的實(shí)現(xiàn)(4.3 4.4)
運(yùn)算放大器的使用詳細(xì)說(shuō)明
貼片三極管上的印字與真實(shí)名稱(chēng)的對(duì)照表詳細(xì)說(shuō)明
瑞芯微rv1106開(kāi)發(fā)資料 rv1106數(shù)據(jù)手冊(cè) rv1106詳細(xì)說(shuō)明書(shū)免費(fèi)下載
深入理解C語(yǔ)言:C語(yǔ)言循環(huán)控制
調(diào)試變頻器詳細(xì)說(shuō)明
CRC16-MODBUS+手算+移位運(yùn)算+C程序+并行運(yùn)算
如何在 樹(shù)莓派 上編寫(xiě)和運(yùn)行 C 語(yǔ)言程序?
C語(yǔ)言的幾種位操作運(yùn)算程序詳細(xì)說(shuō)明
評(píng)論