c 例項總結 位運算代替bool陣列

2021-10-01 14:39:41 字數 1068 閱讀 1488

問題:開發有時會用到多個標誌位,那麼通常如何實現呢?

方式1:普通方式,即使用bool陣列

實現方式:

#define    my_flag          (1<<0)  //二進位制--00000001,16進製制--0x00000001

#define    my_flag2        (1<<1) //二進位制--00000010,16進製制--0x00000002

#define    my_flag3        (1<<2) //二進位制--00000100,16進製制--0x00000004

#define    my_flag4        (1<<3) //二進位制--00001000,16進製制--0x00000008

#define    my_flag5        (1<<4) //二進位制--00010000,16進製制--0x00000010

(使用計算器輸入二進位制可方便看到16進製制)

(1)判斷標誌位是否為true

方法:使用"&"操作符

//判斷my_flag是否為真

int nflag = 0x43;

if(nflag & my_flag )

else

原理:1與任何數相與是它本身,0與任何數相與都為0

(2)將對應的標誌位設定為true

方法:使用「|」操作符

//將my_flag標誌設定為真

int nflag = 0x000000;

nflag = nflag | my_flag;

原理:0與任何數相或是它本身,1與任何數相或都為真

(3)將對應的標誌位設定為false

方法:使用"&"和"~"操作符

//將my_flag標誌設定為假

int nflag = 0x000001;

nflag = nflag & (~my_flag);

原理:取反後其他位都是1,自己位是0,1與任何數相與是它本身,0與任何數相與都為0

C 位運算總結

位運算應用口訣 清零取反要用與,某位置一可用或 若要取反和交換,輕輕鬆鬆用異或 移位運算 要點 1 它們都是雙目運算子,兩個運算分量都是整形,結果也是整形。2 左移 右邊空出的位上補0,左邊的位將從字頭擠掉,其值相當於乘2。3 右移 右邊的位被擠掉。對於左邊移出的空位,如果是正數則空位補0,若為負數...

C 位運算總結

位運算的運算物件只能是整型或者字元型資料。c 的位運算子 c 中的移位運算 移位運算是指將二進位制資訊串作為整體移動。leetcode上位運算的幾道例題 1 位異或運算 異或運算 相同為0,不同為1。將陣列中的所有元素求異或和,對於相同的元素,異或的結果為0。因此,陣列中成對出現的元素異或和為0,所...

C 位運算及例項計算

前言 平時在實際工作中很少用到這個,雖然都是一些比較基礎的東西,但一旦遇到了,又不知所云。剛好最近接觸了一些相關這方面的專案,所以也算是對 這些內容重新溫習實踐了一遍。所以這篇不僅作為個人備忘,也分享給各位重溫一遍。要學會位運算,首先要清楚什麼是位運算?程式中的所有內容在計算機記憶體中都是以二進位制...