Re: [語法] C裡看到的符號

看板C_and_CPP作者 (←這人是超級笨蛋)時間15年前 (2010/08/16 22:33), 編輯推噓6(6014)
留言20則, 8人參與, 最新討論串2/2 (看更多)
※ 引述《holik0123 ()》之銘言:

08/16 22:26,
可以解釋一下他這樣用的意思嗎?
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

08/16 22:35, , 1F
多謝解答,被秒殺
08/16 22:35, 1F

08/16 23:08, , 2F
酷耶XD
08/16 23:08, 2F

08/17 00:10, , 3F
好精簡的寫法~ 就不用在那邊拆數字半天了
08/17 00:10, 3F

08/17 00:50, , 4F
去年修OS 在uC/OS-II的source code裡看到很多這種用法
08/17 00:50, 4F

08/17 00:50, , 5F
看久了就習慣了XD
08/17 00:50, 5F

08/17 01:03, , 6F
標準庫就有這種用法呀! 不用跑去看源碼來熟悉這個啦
08/17 01:03, 6F

08/17 01:09, , 7F
還有些判斷指定flag set(any/or)是否被set/clear的用法
08/17 01:09, 7F

08/17 01:10, , 8F
constant time查找task、event之類的..一開始看真會頭昏@@
08/17 01:10, 8F

08/17 02:25, , 9F
沒有很遠啦,MapleBBS 裡面就一堆 orz
08/17 02:25, 9F

08/17 02:34, , 10F
typedef struct{
08/17 02:34, 10F

08/17 02:34, , 11F
int flagA:1;
08/17 02:34, 11F

08/17 02:34, , 12F
int flagB:1;
08/17 02:34, 12F

08/17 02:34, , 13F
int flagC:1;
08/17 02:34, 13F

08/17 02:35, , 14F
} S_MY_STRUCT;
08/17 02:35, 14F

08/17 02:35, , 15F
S_MY_STRUCT my; if(my.flagA&1) {/* do something.*/}
08/17 02:35, 15F

08/17 02:36, , 16F
我覺得這種表達式 比用 bit+shift 來的好
08/17 02:36, 16F

08/17 02:50, , 17F
我比較習慣玩 bitset ^^"
08/17 02:50, 17F

08/17 03:17, , 18F
不過定義不同遮罩再用 & 也蠻直覺的說
08/17 03:17, 18F

08/19 18:07, , 19F
We often call these "bit-mask"...
08/19 18:07, 19F

08/19 18:07, , 20F
這篇寫得很好!
08/19 18:07, 20F
文章代碼(AID): #1CQKmtNs (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1CQKmtNs (C_and_CPP)