作者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/cn.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