看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《holik0123 ()》之銘言:
holik0123:可以解釋一下他這樣用的意思嗎? 08/16 22:26
假設我現在有八個 flag (f0—f7) 要存在七個位元裡 我一開始設 f1 f4, 那會變成 00010010 (msb 是 f7) 那如現在我想改一個 flag f6 的值 f6 = 0100000 flags = 00010010 那麼我就 flags |= f6 flags 00010010 OR f6 01000000 ——————————— 01010010 就達到我想要的目的了 & 剛好相反, 是想消去某個(或某些)flag 的時候用 例如剛剛的 01010010 如果我現在想消去 f1 那麼 flags &= ~f1 flags 01010010 AND ~f1 11111101 ——————————— 01010000 -- ╱ ̄ ̄ ̄╲ ▏◢█◣ 成龍表示: 是喔... ′/ ‵ ╰╯ ψQSWEET █◤ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.32.81.146
holik0123:多謝解答,被秒殺 08/16 22:35
x000032001:酷耶XD 08/16 23:08
goodrain:好精簡的寫法~ 就不用在那邊拆數字半天了 08/17 00:10
hilorrk:去年修OS 在uC/OS-II的source code裡看到很多這種用法 08/17 00:50
hilorrk:看久了就習慣了XD 08/17 00:50
loveme00835:標準庫就有這種用法呀! 不用跑去看源碼來熟悉這個啦 08/17 01:03
hilorrk:還有些判斷指定flag set(any/or)是否被set/clear的用法 08/17 01:09
hilorrk:constant time查找task、event之類的..一開始看真會頭昏@@ 08/17 01:10
ducksteven:沒有很遠啦,MapleBBS 裡面就一堆 orz 08/17 02:25
softwind:typedef struct{ 08/17 02:34
softwind: int flagA:1; 08/17 02:34
softwind: int flagB:1; 08/17 02:34
softwind: int flagC:1; 08/17 02:34
softwind:} S_MY_STRUCT; 08/17 02:35
softwind:S_MY_STRUCT my; if(my.flagA&1) {/* do something.*/} 08/17 02:35
softwind:我覺得這種表達式 比用 bit+shift 來的好 08/17 02:36
loveme00835:我比較習慣玩 bitset ^^" 08/17 02:50
loveme00835:不過定義不同遮罩再用 & 也蠻直覺的說 08/17 03:17
tomnelson:We often call these "bit-mask"... 08/19 18:07
tomnelson:這篇寫得很好! 08/19 18:07