这个宏的作用是什么

xxjnetwork 2015-09-22 09:32:14
最近在mysql的源码中看到一个这样的宏
#define MY_ALIGN(A,L) (((A) + (L) - 1) & ~((L) - 1))

求帮忙详细分析下它的作用是什么
...全文
136 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
yajuie 2015-09-22
  • 打赏
  • 举报
回复
引用 3 楼 sdghchj的回复:
从A中抹去L-1的bit位。 比如A=5即00000101,L=4, L-1=3即 00000011,取反为 11111100 00000101 & 11111100 = 00000100 = 4
从A中抹去L-1的bit位。 比如A=5即00000101,L=4, L-1=3即 00000011,取反为 11111100 00000101 & 11111100 = 00000100 = 4[/quote] a=5,b=4 (a+b-1)&~(b-1) a->00000101+00000100-00000001=00001000 b-1->00000100-00000001=00000011取反 结果11111100 00001000 & 11111100 结果 00001000 呵呵,谢谢我也学会一招
「已注销」 2015-09-22
  • 打赏
  • 举报
回复
原来与非门的作用是这样的啊。2、3楼正解
  • 打赏
  • 举报
回复

~((L) - 1))//L作为补码的原码
引用 2 楼 Saleayas 的回复:
把地址 A 以 L 对齐。 L 必须是 4, 8, 16 之类的。
++
sdghchj 2015-09-22
  • 打赏
  • 举报
回复
从A中抹去L-1的bit位。 比如A=5即00000101,L=4, L-1=3即 00000011,取反为 11111100 00000101 & 11111100 = 00000100 = 4
Saleayas 2015-09-22
  • 打赏
  • 举报
回复
把地址 A 以 L 对齐。 L 必须是 4, 8, 16 之类的。
「已注销」 2015-09-22
  • 打赏
  • 举报
回复
#define MY_ALIGN(A,L)	(((A) + (L) - 1) & ~((L) - 1))
应该就是在编译的时候将
#define MY_ALIGN(A,L)
替换成
#(((A) + (L) - 1) & ~((L) - 1))
呗 A+L-1与非L-1具体结果,还真得想一下

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧