Question à propos de round_up macro

#define ROUND_UP(N, S) ((((N) + (S) - 1) / (S)) * (S))

Avec la macro ci-dessus, quelqu'un pourrait-il m'aider sur la compréhension de l' "(s)-1" partie, pourquoi?

et aussi des macros comme:

#define PAGE_ROUND_DOWN(x) (((ULONG_PTR)(x)) & (~(PAGE_SIZE-1)))
#define PAGE_ROUND_UP(x) ( (((ULONG_PTR)(x)) + PAGE_SIZE-1)  & (~(PAGE_SIZE-1)) ) 

Je sais "(~(PAGE_SIZE-1)))" la partie est égal à zéro les cinq derniers bits, mais d'autres que je suis paumé, en particulier le rôle de "& " opérateur joue.

Merci,

OriginalL'auteur user124858 | 2009-06-18