Die Antwort von Sparky ist ein Standardweg, um dieses Problem zu lösen, aber wie ich auch in meinem Kommentar geschrieben habe, laufen Sie Gefahr, überzulaufen. Dies kann durch Verwendung eines breiteren Typs gelöst werden, aber was ist, wenn Sie teilen möchten?long long
s ?
Die Antwort von Nathan Ernst bietet eine Lösung, beinhaltet jedoch einen Funktionsaufruf, eine Variablendeklaration und eine Bedingung, wodurch sie nicht kürzer als der OP-Code und wahrscheinlich sogar langsamer ist, da die Optimierung schwieriger ist.
Meine Lösung lautet:
q = (x % y) ? x / y + 1 : x / y;
Es ist etwas schneller als der OPs-Code, da das Modulo und die Division mit derselben Anweisung auf dem Prozessor ausgeführt werden, da der Compiler erkennen kann, dass sie äquivalent sind. Mindestens gcc 4.4.1 führt diese Optimierung mit dem Flag -O2 auf x86 durch.
Theoretisch könnte der Compiler den Funktionsaufruf in Nathan Ernsts Code einbinden und dasselbe ausgeben, aber gcc hat das nicht getan, als ich ihn getestet habe. Dies könnte daran liegen, dass der kompilierte Code an eine einzelne Version der Standardbibliothek gebunden wird.
Abschließend ist nichts davon auf einem modernen Computer von Bedeutung, es sei denn, Sie befinden sich in einer extrem engen Schleife und alle Ihre Daten befinden sich in Registern oder im L1-Cache. Andernfalls sind alle diese Lösungen gleich schnell, mit Ausnahme von Nathan Ernsts, der möglicherweise erheblich langsamer ist, wenn die Funktion aus dem Hauptspeicher abgerufen werden muss.
q = x/y + (x % y != 0);
ist. Es reicht einfach aus