A very interesting phenomenon has been found today.

As a division, Python2 and C + + have different divisible results in the case of negative numbers:

When I was 5/3,

Results for C + +: 1

Results for Python2:2

(Note that 5/-3 is still available in C + +-1, Python2-2)

It can be seen that C + + in the negative division of the implementation of the number is directly after the decimal point after the operation, that is, return and 0 is closer to the number.

In Python2, however, the largest integer that is less than or equal to the quotient is returned, which is the number closer to the return and-∞.

When doing the% operation, it is based on this logic:

A = b * C + R

Where a is the divisor, B is the divisor, C is quotient, and R is the result of the% operation.

In the above example, A and B are-5 and 3.

In the case of C + +, quotient c is-1, so r can be calculated to be-2.

In Python case quotient C is-2, so r can be calculated as 1.

！！！ It is worth noting that when the operation is changed to 5-3, the result of C + + is that the result of 2,python2 is-1, and the previous result is just the opposite of the sign.

If a classmate thinks it's messy, remember a = b * C + R.

With the same logic, when a is 5,b is-3, C + + because quotient c is-1, so R is 2,python when quotient C is-2 so R is-1.

So what is the cause of this discrepancy?

In fact, because of the difference between "modulus" and "remainder".

Many students may think that it is one thing to find a modulo operation and take the remainder operation. In fact, they do exhibit exactly the same properties within the range of positive integers. But in the case of negative numbers, they behave differently.

The% c + + shows the result of the "take out" operation.

Python's% shows the result of the "modulo" operation.

Whether C + + or Python, both the modulo and the remainder are defined according to the formula A = b * C + R, and the only difference is whether quotient C is rounding in 0 directions or-∞ direction.

When quotient c is rounded to 0, the resulting R is the "remainder", which is the result in C + +.

When quotient c is rounded to the-∞ direction, the resulting r is the "modulus", which is the result in Python2.

In Python3, both sides of the "/" are integers, and the operations are converted to real operations and return real numbers. The integer division is denoted by "//".

With this divisible nature of python, we can get a little trick:

Many times we will encounter "something X a group, total need y, at least how many groups?" "Such a problem.

In C + + we have to write this logic: answer = y/x; if (y% x! = 0) ans + = 1;

In Python we can take advantage of the negative character to get the result easily: Answer =-(-y//x).

From the difference between C + + and Python division, we talk about modulo (modulus) and redundancy (remainder)