作者DrStein (啤酒肚)
看板C_and_CPP
標題Re: [問題] 簡潔的boolean比較寫法?
時間Mon Nov 28 18:33:21 2011
※ 引述《thanksgive (乾溫)》之銘言:
: 開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
: C++
: 問題(Question):
: 我有五個bool變數,
: 然後會根據變數來判斷分支
: 請問有比較簡潔的寫法嗎?
: (比方類似linux那樣,用數字0~7代表三個布林變數狀態)
#define STATUS1 0x01
#define STATUS2 0x02
#define STATUS3 0x04
#define STATUS4 0x08
#define STATUS5 0x10
#define IS_STATUS1_TRUE(BB) ( ((BB)>>0) &(0x01) )
#define IS_STATUS2_TRUE(BB) ( ((BB)>>1) &(0x01) )
#define IS_STATUS3_TRUE(BB) ( ((BB)>>2) &(0x01) )
#define IS_STATUS4_TRUE(BB) ( ((BB)>>3) &(0x01) )
#define IS_STATUS5_TRUE(BB) ( ((BB)>>4) &(0x01) )
#define MERGE_STATUS(AA, BB) ((AA) | (BB))
typedef unsigned char EightStatus;
EightStatus sts;
sts = MERGE_STATUS(STATUS3, STATUS4);
if(IS_STATUS1_TRUE(sts))
{
:
:
}
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 60.251.134.25
推 CJHhelper:#define STATUS5 0x10 ? 0x16 11/28 18:34
→ CJHhelper:很漂亮的方式 11/28 18:36
→ DrStein:不懂樓上意思,0x16 不是 00010110嗎 11/28 18:41
→ angleevil:他是說你打錯字 11/28 18:42
推 angleevil:此方法很漂亮 11/28 18:44
→ DrStein:不懂,那裡打錯了,0x10是0001 0000啊 11/28 18:44
推 adxis:應該沒錯 +1 11/28 18:47
→ angleevil:喔,你沒錯.我忘記那是16進位的表示. 11/28 18:48
推 CJHhelper:我忘記是16進位了 sorry 11/28 18:49
推 gundan:好方法,推! 11/29 09:03