作者antoniee (求婚大作戰好看)
看板C_and_CPP
標題[問題] 這兩行code的應用場合
時間Sat Jul 15 11:11:36 2017
開發平台(Platform): (Ex: Win10, Linux, ...)
Linux
編譯器(Ex: GCC, clang, VC++...)+目標環境(跟開發平台不同的話需列出)
GCC
問題(Question):
請問一下有沒有人知道下面那段程式碼,會用在跟記憶體管理常式有關的什麼場合嗎...
我只看的出來他是把p指到的內容的LSB清空
查了一下一般會這樣做主要是把數字變成偶數或做memory address的alignment
但這種將指到char的內容的lsb清空
實在想不出應用場合在哪......
程式碼(Code):(請善用置底文網頁, 記得排版)
char *p;
...
*p = (*p) & ~1;
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.231.147.208
※ 文章網址: https://webptt.com/m.aspx?n=bbs/C_and_CPP/M.1500088298.A.991.html
1F:→ Hazukashiine: LSB 的 B 是 byte, lsb 的 b 才是 bit OuO 07/15 11:28
2F:→ Hazukashiine: 但是還是要看上下文 也不一定是這樣 XD 07/15 11:30
3F:→ Hazukashiine: 但是你的問題怪怪的 問這行程式碼 能幹嘛沒有意義 07/15 11:31
4F:→ Hazukashiine: 這就是一個位元運算而已 能應用在你會需要它的地方 07/15 11:32
5F:→ antoniee: 這是網路看到的一個題目 可能要了解記憶體管理常式 07/15 11:34
6F:→ antoniee: 才想得出應用在哪吧@@" 07/15 11:34
7F:→ Hazukashiine: 拿來做 bit flags/masks 吧? 07/15 11:40
8F:推 ggBird: 運用很多呀,寫driver讀取暫存器常要對某個field做設定 07/15 11:45
9F:→ antoniee: 恩 也常看到bit flag/mask設置沒錯 07/15 11:55
10F:→ antoniee: 可能我太執著於要找到跟記憶體管理常式的關係 07/15 11:59
※ 編輯: antoniee (36.231.147.208), 07/15/2017 12:16:57
11F:推 chuegou: 這裡的~1 結果會是幾位元? 07/15 12:19
12F:推 SeamusBerloz: 8位元暫存器清除最低位元? 07/15 13:42
14F:→ antoniee: 對阿.... 07/16 21:17
15F:推 jasonwu23: 就是把bit0清掉 這樣寫不清楚 07/16 23:25
16F:→ jasonwu23: 一般都是 &=~ 0x01 這樣就應該懂了吧 07/16 23:27
17F:→ jasonwu23: 意思就是 不管bit0現在是1還是0 經過這行就變0 07/16 23:29