将bytes上调至8的倍数

STL源码剖析中有一段代码实现将bytes上调至8的倍数,借鉴了如何将一个数上调至8的倍数这篇博客

enum{__ALIGN=8};
size_t ROUND_UP(size_t bytes)
{
    return ((bytes)+__ALIGN-1)&~(__ALIGN-1));
}

这段代码可以这样理解:

首先 __ALIGN=00001000;

则__ALIGN-1=00000111;

~(__ALIGN-1)=11111000;

bytes+__ALIGN-1,如果bytes本身已经是8的倍数,低三位肯定是0, 此时低三分别+1又与0相与,结果仍是bytes本身

如果bytes不是8的倍数,则8n<bytes<8(n+1);

即bytes=8n+q;

bytes+__ALIGN-1=8(n+1)+p;   8(n+1)低三位一定是0,此时低三位代表的数就是p,与0相与消除

((bytes)+__ALIGN-1)&~(__ALIGN-1))=8(n+1);

 

同理,可以根据该式将bytes上调至2^n的倍数

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值