[語法] C裡看到的符號

看板C_and_CPP作者時間13年前 (2010/08/16 22:23), 編輯推噓5(5018)
留言23則, 11人參與, 最新討論串1/2 (看更多)
請問C裡面 |= 和&= 是什麼意思? 第一次看到這樣寫法 EX:if (!(flags & MS_RDONLY)) 865 mode |= FMODE_WRITE; -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.33.231.82

08/16 22:24, , 1F
跟 += 一樣嗎? 第一次看到.....
08/16 22:24, 1F

08/16 22:25, , 2F
二進位 OR AND
08/16 22:25, 2F

08/16 22:25, , 3F
差不多的東西 bitwise的比較常用在較低階的控制上
08/16 22:25, 3F

08/16 22:26, , 4F
是的 flag &= SOMEFLAG; 等同 flag = flag & SOMEFLAG;
08/16 22:26, 4F

08/16 22:26, , 5F
可以解釋一下他這樣用的意思嗎?
08/16 22:26, 5F

08/16 22:28, , 6F
我還以為原po跟3樓是同一個@_@
08/16 22:28, 6F

08/16 22:30, , 7F
知道 & 這個運算的意義嗎?
08/16 22:30, 7F

08/16 22:31, , 8F
4樓的我懂 可是這個例子|=
08/16 22:31, 8F

08/16 22:32, , 9F
應該只是讓某些bit被set,然後1個bit表示一種意思
08/16 22:32, 9F

08/16 22:32, , 10F
長的跟我真的有點像XD 一樣拆成四樓 通常指設置某些flag
08/16 22:32, 10F

08/16 22:32, , 11F
喔喔我懂了那是行數眼殘
08/16 22:32, 11F

08/16 22:33, , 12F
我是說『|=』
08/16 22:33, 12F

08/16 22:33, , 13F
剛剛一直在想那個 865 是什麼東西....XDDDD
08/16 22:33, 13F

08/17 00:06, , 14F
865是行數嗎@_@? 看不出來是甚麼..
08/17 00:06, 14F

08/17 07:24, , 15F
if(ch >= 'A' && ch <= 'Z') { ch |= 0x20; }
08/17 07:24, 15F

08/17 07:24, , 16F
想到這個XD
08/17 07:24, 16F

08/17 07:25, , 17F
'A' = 65 (64 + 1) 'a' = 97(64 + 32 + 1) =.=
08/17 07:25, 17F

08/17 07:26, , 18F
同理,小轉大 if(ch >= 'a' && ch <= 'z') {ch ^= 0x20; }
08/17 07:26, 18F

08/17 08:45, , 19F
感覺還是 isalpha、tolower、toupper 比較直覺
08/17 08:45, 19F

08/17 12:20, , 20F
其實我都直接ch - 'A' + 'a' 超直覺的XD
08/17 12:20, 20F

08/17 12:21, , 21F
__CRT_INLINE int __cdecl _tolower(int c) {
08/17 12:21, 21F

08/17 12:21, , 22F
return ( c -'A'+'a'); } //Dev C裡的也是這樣做
08/17 12:21, 22F

08/18 01:17, , 23F
不過現在應該都是 mapping 居多吧 很少在 > 'A' < 吧
08/18 01:17, 23F
文章代碼(AID): #1CQKdKK- (C_and_CPP)
文章代碼(AID): #1CQKdKK- (C_and_CPP)