這大陸文章先備份,怕哪天就沒了

設定某個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寫成活的。

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 JL8051 的頭像
    JL8051

    不會的就放這邊

    JL8051 發表在 痞客邦 留言(0) 人氣()