2012-10-04 38 views
6

我有一個值,我想要對齊給定的對齊方式,即將值增加到對齊的下一個倍數,如果它尚未對齊。如何將值與給定的對齊值對齊

什麼是簡潔的方式來做到這一點在C + +?

例如

int x; 
int alignment; 
int y = ???; // align x to alignment 
+2

C++ 11具有'alignas' ,如果你可以使用它。 – chris

+0

只是要清楚:你正在談論*內存對齊*,所以你*不*想「增加值」 - 你想調整對象的內存地址;是對的嗎? –

+0

int y = x +(x%對齊== 0?0:對齊-x%對齊) –

回答

8

比方說對準是a

---(k-1)a-----------x--------------ka--------- 
     <----r----><-----(a-r)---> 

其中k是整數(因此ka是對準的倍數)

首先找到其餘

r = x%a

然後遞增x至下一個倍數

y = x + (a-r)

但是如果r = 0,則Y = X

所以最後

r = x%a; 
y = r? x + (a - r) : x; 
+1

如果有餘數'r',則只需增加。所以它是'y = r? x +(a-r):x' – ScaryAardvark

+0

Ya。編輯我的答案。謝謝。 – Shashwat

+0

謝謝,這是完美的作品。 – ljbade