负数取模

参考这里写链接内容
一、自然数的取模运算的定义是这样的
定义1:
如果a和d是两个自然数,d非零,可以证明存在两个唯一的整数 q 和 r,满足 a = qd + r 且0 ≤ r < d。其中,q 被称为商,r 被称为余数。
定义2:
如果a 与d 是整数,d 非零,那么余数 r 满足这样的关系:
a = qd + r , q 为整数,且0 ≤ |r| < |d|。
二、
(1)对于任何同号的两个整数,其取余结果没有争议,所有语言的运算原则都是使商尽可能小。
(2)对于异号的两个整数,C++/Java语言的原则是使商尽可能大,很多新型语言和网页计算器的原则是使商尽可能小
那么对于负数,是否可以沿用这样的定义呢?我们发现,假如我们按照正数求余的规则求 (-7) mod 3 的结果,就可以表示 -7 为 (-3)* 3 +2。其中,2是余数,-3是商。
那么,各种编程语言和计算器是否是按照这样理解的呢?下面是几种软件中对此的理解。
C++(G++ 编译): cout << (-7) % 3; // 输出 -1
Java(1.6): System.out.println((-7) % 3); // 输出 -1
Python 2.6:>>> (-7) % 3 // 输出 2
百度计算器:(-7) mod 3 = 2
Google 计算器:(-7) mod 3 = 2
有道计算器:(-7) mod 3 = -1

根据定义2,7 = (-3) * (-2) + 1 或7 = (-3) * (-3) -2,所以余数为 1 或 -2。
C++(G++ 编译): cout << 7 % (-3); // 输出 1
Java(1.6): System.out.println(7 % (-3)); // 输出 1
Python 2.6:>>> 输出 -2
百度计算器:7 mod (-3) = -2
Google 计算器: 7 mod (-3) = -2
有道计算器:不支持
C++(G++ 编译): cout << (-7) % (-3); // 输出 -1
Java(1.6): System.out.println((-7) % (-3)); // 输出 -1
Python 2.6:>>> 输出 -1
百度计算器:-7 mod (-3) = -1
Google 计算器: -7 mod (-3) = -1
结果让人大跌眼镜,所有语言和计算机返回结果完全一致。
总结时间到

猜你喜欢

转载自blog.csdn.net/http188188/article/details/51083123
今日推荐