我有一個值,我想要對齊給定的對齊方式,即將值增加到對齊的下一個倍數,如果它尚未對齊。如何將值與給定的對齊值對齊
什麼是簡潔的方式來做到這一點在C + +?
例如
int x;
int alignment;
int y = ???; // align x to alignment
我有一個值,我想要對齊給定的對齊方式,即將值增加到對齊的下一個倍數,如果它尚未對齊。如何將值與給定的對齊值對齊
什麼是簡潔的方式來做到這一點在C + +?
例如
int x;
int alignment;
int y = ???; // align x to alignment
比方說對準是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;
如果有餘數'r',則只需增加。所以它是'y = r? x +(a-r):x' – ScaryAardvark
Ya。編輯我的答案。謝謝。 – Shashwat
謝謝,這是完美的作品。 – ljbade
C++ 11具有'alignas' ,如果你可以使用它。 – chris
只是要清楚:你正在談論*內存對齊*,所以你*不*想「增加值」 - 你想調整對象的內存地址;是對的嗎? –
int y = x +(x%對齊== 0?0:對齊-x%對齊) –