《C++回顾笔记》取模运算与取余运算
对于整型数a,b来说,取模运算和取余运算的计算方法是一样的:
- 求整数商:c = a/b;
- 取余和取模:r = a - c * b;
取模运算和取余运算的区别在于第一步对计算结果舍入的方式不同:取模运算在计算c的值时,会将结果向负无穷方向舍入
,而取余运算在取c的值时,向0方向舍入
。
例如-1对256取模和取余时:
- 求整数商c,取模将结果向负无穷方向舍入得到-1,而取余则将结果向0方向舍入得到0;
- 将算出的整数商c代入计算r的公式,得到取模的结果为255,而取余的结果为-1;
当整数a和b的符号一致时,易知其整数商必大于或者等于0,取模运算和取余运算对其舍入后的结果也一致,所以此时取模运算和取余运算的结果是一样的。
当整数a和b的符号不一致时,易知其整数商必小于或者等于0,因此可以得到:
1 |
|
其中,sign(b)
表示b的符号(b大于0时,其为1;小于0时其为-1)
。而s
表示舍入后整数商对原始商的变化倍数。易知对于取模运算来说,s
必大于1,而对于取模运算来说,s
必小于1。也就是说,当a和b的符号不一致时,求模运算结果的符号和b一致,而求余运算结果的符号和a一致
。
最后,需要注意的是,在不同的语言里,运算符%
表示的含义不一致,有的语言认为%表示取模运算(如Python)
,但在C/C++里,%
表示取余运算。
《C++回顾笔记》取模运算与取余运算
https://asancai.github.io/posts/ad89a9b/