二分查找向上还是向下取整_[小技巧] 倍数的向上取整和向下取整

啥叫倍数的向上取整与向下取整呢?

举个例子,你有一个函数,用来分配一块内存,为了提高运行速度,要对内存大小进行对齐。

function NewMemBlock(const BlockSize, AlignSize: Integer): Pointer;

var

NewSize: Integer;

begin

NewSize := ...

GetMem(Result, NewSize);

end;

假设 BlockSize = 10,AlignSize = 8

所谓向下取整,即 NewSize = 8,是很简单的:

NewSize := BlockSize div AlignSize * AlignSize;

// 10 div 8 * 8 => 1 * 8 => 8

这是因为 div 只会取结果的整数部分而忽略小数部分。

向上取整则需要判断余数,余数不为 0 则需要补齐缺少的部分:

// 0.

NewSize := BlockSize;

if BlockSize mod AlignSize <> 0 then

Inc(NewSize, AlignSize - BlockSize mod AlignSize);

// 10 mod 8 <> 0 => Inc(NewSize, 8 - 10 mod 8) => Inc(10, 6) => 16

这个代码能达到目的,但是显得很繁琐,我们来简化一下,下面几种方法都可以实

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值