這大陸文章先備份,怕哪天就沒了
設定某個bit為0或1的程式
用C寫的,還蠻清楚的,就給各位參考囉
原文 https://www.cnblogs.com/oomusou/archive/2011/02/16/bit_control.html
/* (C) OOMusou 2011 http://oomusou.cnblogs.com Filename : bit_ctrl.c Compiler : Visual Studio 2010 / Visual C++ 10.0 Description : bit control in C Release : 02/16/2011 1.0 */ #include <stdio.h> void bit_ctrl_0 (char* pflag, int bit) { *pflag &= ~(1 << bit); } void bit_ctrl_1 (char* pflag, int bit) { *pflag |= (1 << bit); } int main() { char flag = 0xC; // 00001100 bit_ctrl_0(&flag, 2); printf("bit 2 to be zero:%#x\n", flag); bit_ctrl_1(&flag, 2); printf("bit 2 to be one:%#x\n", flag); }
執行結果 bit 2 to be zero:8 bit 2 to be one:12 11行 void bit_ctrl_0 (char* pflag, int bit) { *pflag &= ~(1 << bit); } bit_ctrl_0() function,傳入原flag的pointer與第幾bit要設定成0,看到一堆*&=<你可能會昏頭了。將其展開得到如下: void bit_ctrl_0 (char* pflag, int bit) { (*pflag) = (*pflag) & ~(1 << bit); } 展開後(*pflag)應該就沒問題了,現在問題在於~(1 << bit)是什麼意思? 回想基礎知識所談的,假設我們要將一數的第2個bit設為0,我們會 &~MASK,也就是&~(0000_0100),其中(0000_0100)就是(1 << bit),在此處bit為2,所以透過 << 這個shift operator,我們就能將MASK寫成活的。
全站熱搜
留言列表