C++ Best way to get integer division and remainder
On x86 the remainder is a by-product of the division itself so any half-decent compiler should be able to just use it (and not perform a div
again). This is probably done on other architectures too.
Instruction:
DIV
srcNote: Unsigned division. Divides accumulator (AX) by "src". If divisor
is a byte value, result is put to AL and remainder to AH. If divisor
is a word value, then DX:AX is divided by "src" and result is stored
in AX and remainder is stored in DX.
int c = (int)a / b;
int d = a % b; /* Likely uses the result of the division. */
How to find the remainder of a division in C?
You can use the %
operator to find the remainder of a division, and compare the result with 0
.
Example:
if (number % divisor == 0)
{
//code for perfect divisor
}
else
{
//the number doesn't divide perfectly by divisor
}
How can I get the quotient and the remainder in a single step?
div
will do this. See reference and example:
/* div example */
#include <stdio.h>
#include <stdlib.h>
int main ()
{
div_t divresult;
divresult = div (38,5);
printf ("38 div 5 => %d, remainder %d.\n", divresult.quot, divresult.rem);
return 0;
}
Output:
38 div 5 => 7, remainder 3.
EDIT:
The C Specification says:
7.20 General utilities
The types declared are size_t and wchar_t (both described in 7.17),
div_t
which is a structure type that is the type of the value returned by the div function,
ldiv_t
which is a structure type that is the type of the value returned by the ldiv function, and
lldiv_t
which is a structure type that is the type of the value returned by the lldiv function.
... but it doesn't say what the definition of div_t
is.
Fast ceiling of an integer division in C / C++
For positive numbers where you want to find the ceiling (q) of x when divided by y.
unsigned int x, y, q;
To round up ...
q = (x + y - 1) / y;
or (avoiding overflow in x+y)
q = 1 + ((x - 1) / y); // if x != 0
Best way to extract the remainder of integer number
just get the remainder when you divide the number by 10.
rem = number%10;
12345 % 10 = 5.
Rounding integer division (instead of truncating)
int a = 59.0f / 4.0f + 0.5f;
This only works when assigning to an int as it discards anything after the '.'
Edit:
This solution will only work in the simplest of cases. A more robust solution would be:
unsigned int round_closest(unsigned int dividend, unsigned int divisor)
{
return (dividend + (divisor / 2)) / divisor;
}
How can I calculate divide and modulo for integers in C#?
Here's an answer from the MSDN documentation.
When you divide two integers, the result is always an integer. For example, the result of 7 / 3 is 2. To determine the remainder of 7 / 3, use the remainder operator (%).
int a = 5;
int b = 3;
int div = a / b; //quotient is 1
int mod = a % b; //remainder is 2
What is the behavior of integer division?
Will result always be the floor of the division? What is the defined behavior?
Not quite. It rounds toward 0, rather than flooring.
6.5.5 Multiplicative operators
6 When integers are divided, the result of the / operator is the algebraic quotient with any
fractional part discarded.88) If the quotient a/b is representable, the expression
(a/b)*b + a%b shall equal a.
and the corresponding footnote:
- This is often called ‘‘truncation toward zero’’.
Of course two points to note are:
3 The usual arithmetic conversions are performed on the operands.
and:
5 The result of the / operator is the
quotient from the division of the
first operand by the second; the
result of the % operator is the
remainder. In both operations, if the
value of the second operand is zero,
the behavior is undefined.
[Note: Emphasis mine]
Related Topics
How to Make the Map::Find Operation Case Insensitive
Why Was Std::Pow(Double, Int) Removed from C++11
C++ Format MACro/Inline Ostringstream
Uses for Anonymous Namespaces in Header Files
Deciphering C++ Template Error Messages
Comparing 3 Modern C++ Ways to Convert Integral Values to Strings
Edges on Polygon Outlines Not Always Correct
Why Does Valgrind Say Basic Sdl Program Is Leaking Memory
Error: 'Int32_Max' Was Not Declared in This Scope
Cost of Throwing C++0X Exceptions
C++ Template Typename Iterator
How to Write a Std::String to a Utf-8 Text File
What Does 'Return *This' Mean in C++
Why Must I Put a Semicolon at the End of Class Declaration in C++
What Is a Nested Name Specifier
In C/C++, Is Char* Arrayname[][] a Pointer to a Pointer to a Pointer or a Pointer to a Pointer