嵌入式開發 設置清除

有個面試題,用程序實現下面的功能面試

給定一個整型變量a,寫兩段代碼,第一個設置a的bit 3,第二個清除a 的bit 3。在以上兩個操做中,要保持其它位不變it


#define BIT3 (0x1 << 3)
static int a;
void set_bit3(void)
{
    a |= BIT3;
}
void clear_bit3(void)
{
    a &= ~BIT3;
}變量

其實一開始我不是很懂這段代碼,因而百度了下,而後綜合各家的解釋,集合我本身的理解百度

比方說,用8位表示二進制

0x1 << 3 的意思是把1左移動3位;程序

原來是0000 0001 ,而後左移3位,表示爲 0000 1000static

第一個設置a的bit 3集合

a |= BIT3;移動

假如a是 5,用二進制表示爲 0000 0101,而後和0000 1000進行或運算,獲得的結果是 0000 1101,這樣就完美的在對應的位置設置了1;void

第二個清除a 的bit 3

a &= ~BIT3

~BIT3 用二進制表示 就是 1111 0111

我這裏假如a是8,用二進制表示爲0000 1000

而後 用0000 1000 和1111 0111 進行與運算 ,獲得的結果是 0000 0000 

這樣就把對應位置的值清除了

相關文章
相關標籤/搜索