La réponse de Sparky est un moyen standard de résoudre ce problème, mais comme je l'ai également écrit dans mon commentaire, vous courez le risque de débordements. Cela peut être résolu en utilisant un type plus large, mais que se passe-t-il si vous souhaitez diviser long long
s?
La réponse de Nathan Ernst fournit une solution, mais elle implique un appel de fonction, une déclaration de variable et un conditionnel, ce qui le rend pas plus court que le code OP et probablement encore plus lent, car il est plus difficile à optimiser.
Ma solution est la suivante:
q = (x % y) ? x / y + 1 : x / y;
Il sera légèrement plus rapide que le code OP, car le modulo et la division sont effectués en utilisant la même instruction sur le processeur, car le compilateur peut voir qu'ils sont équivalents. Au moins gcc 4.4.1 effectue cette optimisation avec l'indicateur -O2 sur x86.
En théorie, le compilateur pourrait incorporer l'appel de fonction dans le code de Nathan Ernst et émettre la même chose, mais gcc ne l'a pas fait quand je l'ai testé. Cela peut être dû au fait qu'il lierait le code compilé à une seule version de la bibliothèque standard.
En conclusion, rien de tout cela n'a d'importance sur une machine moderne, sauf si vous êtes dans une boucle extrêmement serrée et que toutes vos données sont dans des registres ou dans le cache L1. Sinon, toutes ces solutions seront également rapides, à l'exception peut-être de Nathan Ernst, qui pourrait être considérablement plus lent si la fonction doit être récupérée de la mémoire principale.
q = x/y + (x % y != 0);
assez