如何将值与给定的对齐方式对齐

ljb*_*ade 8 c++ math

我有一个值,我想要对齐给定的对齐,即如果尚未对齐,则将值增加到对齐的下一个倍数.

在C++中执行此操作的简洁方法是什么?

例如

int x;
int alignment;
int y = ???; // align x to alignment
Run Code Online (Sandbox Code Playgroud)

Sha*_*wat 11

让我们说对齐是 a

---(k-1)a-----------x--------------ka---------
         <----r----><-----(a-r)--->
Run Code Online (Sandbox Code Playgroud)

where k是一个整数(所以ka是对齐的倍数)

首先找到剩下的

r = x%a

然后将x增加到下一个倍数

y = x + (a-r)

但如果r = 0,那么y = x

最后

r = x%a;
y = r? x + (a - r) : x;
Run Code Online (Sandbox Code Playgroud)

  • 而不是'y = r?x +(a - r):x`,你也可以使用`y =(x + a - 1)/ a*a`,如果`a`是形式为'1 << n的常量,则效率更高因为编译器可以将其重写为类似于`y = x + a - 1&〜(a - 1)`的东西,这比条件更好. (2认同)