3 回答

TA貢獻(xiàn)1866條經(jīng)驗(yàn) 獲得超5個贊
位域并不像您想象的那樣可移植,因?yàn)椤?C不能保證機(jī)器字內(nèi)的字段順序”(The C book)
忽略這一點(diǎn),正確使用任何一種方法都是安全的。兩種方法都允許符號訪問整數(shù)變量。您可以爭辯說,位域方法更易于編寫,但也意味著需要查看更多代碼。

TA貢獻(xiàn)1825條經(jīng)驗(yàn) 獲得超6個贊
如果問題在于設(shè)置和清除位容易出錯,那么正確的做法是編寫函數(shù)或宏以確保正確執(zhí)行。
// off the top of my head
#define SET_BIT(val, bitIndex) val |= (1 << bitIndex)
#define CLEAR_BIT(val, bitIndex) val &= ~(1 << bitIndex)
#define TOGGLE_BIT(val, bitIndex) val ^= (1 << bitIndex)
#define BIT_IS_SET(val, bitIndex) (val & (1 << bitIndex))
如果您不介意val必須是左值(除BIT_IS_SET以外),這將使代碼可讀。如果那不能使您滿意,那么您可以取出作業(yè),用括號括起來并用作val = SET_BIT(val,someIndex); 這將是等效的。
確實(shí),答案是考慮將您想要的東西與想要的方式脫鉤。

TA貢獻(xiàn)1799條經(jīng)驗(yàn) 獲得超6個贊
您必須從作家的角度考慮這一點(diǎn)-了解您的聽眾。因此,需要考慮幾個“受眾”。
首先是經(jīng)典的C程序員,他們掩飾了自己的一生,并且可以在睡眠中做到這一點(diǎn)。
第二個是新手,他不知道||和東西是什么。他們在上一份工作中編程php,現(xiàn)在為您工作。(我說這是做PHP的newb)
如果您寫的是要滿足第一批讀者(全天都是位掩碼)的話,那么會讓他們感到非常高興,并且他們將能夠被蒙住眼睛。但是,新手可能需要克服龐大的學(xué)習(xí)技巧,才能維護(hù)您的代碼。他們將需要了解二進(jìn)制運(yùn)算符,如何使用這些操作來設(shè)置/清除位,等等。您幾乎肯定會因?yàn)閚ewb引入了bug,因?yàn)樗?她需要所有的技巧才能使其正常工作。
另一方面,如果您為了滿足第二個讀者而寫作,則新手將可以更輕松地維護(hù)代碼。他們會有更輕松的時光
flags.force = 0;
比
flags &= 0xFFFFFFFE;
最初的聽眾會變得脾氣暴躁,但是很難想象他們將無法理解和維護(hù)新的語法。搞砸起來要困難得多。不會有新的錯誤,因?yàn)閚ewb可以更輕松地維護(hù)代碼。您將獲得有關(guān)“如何回想起我今天需要穩(wěn)定的手和磁化的針來設(shè)置位...我們什至沒有位罩!”的講座。(感謝XKCD)。
因此,我強(qiáng)烈建議使用位掩碼上的字段來使代碼安全。
- 3 回答
- 0 關(guān)注
- 611 瀏覽
添加回答
舉報