有個面試題,用程序實現下面的功能面試
給定一個整型變量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
這樣就把對應位置的值清除了