2012-10-04 77 views
6

Tengo un valor que quiero alinear con una alineación dada, es decir, aumentar el valor al siguiente múltiplo de la alineación si no está alineado.Cómo alinear un valor a una alineación dada

¿Qué es una forma concisa de hacer esto en C++?

por ejemplo

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

C++ 11 tiene 'alignas' si puedes usar eso – chris

+0

Para que quede claro: está hablando de * alineación de memoria * por lo que * no * quiere "aumentar el valor" - desea alinear la dirección de memoria del objeto; ¿está bien? –

+0

int y = x + (alineación x% == 0? 0: alineación - alineación x%) –

Respuesta

8

permite decir alineación es a

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

donde k es un número entero (por lo ka es un múltiplo de alineación)

En primer lugar encontramos el resto

r = x%a

luego de la subasta xa siguiente múltiplo

y = x + (a-r)

Pero si r = 0, entonces y = x

Así que finalmente

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

Solo desea incrementar si hay un resto 'r'. entonces es 'y = r? x + (a-r): x ' – ScaryAardvark

+0

Ya. Editado mi respuesta. Gracias. – Shashwat

+0

Gracias, eso funciona perfectamente. – ljbade

Cuestiones relacionadas