java中取余和取模的區別


前言

對整數a,b來說,取余和取模的計算過程相同:

  1. 求整數商 c = a/b
  2. 計算模或者余數 r = a-c*b

區別在於第一步求商的方法:

  • 取余運算,結果向0方向舍入
  • 取模運算,結果向負無窮方向舍入

當a和b符號相同時,取余和取模結果沒有區別,符號不同時,結果不一致,取余結果的符號和a相同,取模結果的符號和b相同。以下面計算為例

-7 % 3

得到的浮點數商為 -2.333 左右,取余盡可能向0靠近,商為-2,取模盡可能向負無窮靠近,商為-3,所以取余結果為

-7-(-2)*3=-7-(-6)=-1

取模結果為

-7-(-3)*3=-7-(-9)=2

java,kotlin中的%為取余,python的%為取模。

java測試

java中也提供了取模的方法,Math.floorMod()。

public class TestMod {

  public static void main(String[] args) {
    System.out.println("=====取余");
    System.out.println(7 % 3);
    System.out.println(7 % -3);
    System.out.println(-7 % 3);
    System.out.println(-7 % -3);
    System.out.println("=====取模");
    System.out.println(Math.floorMod(7, 3));
    System.out.println(Math.floorMod(7, -3));
    System.out.println(Math.floorMod(-7, 3));
    System.out.println(Math.floorMod(-7, -3));
  }

}

輸出結果為

=====取余
1
1
-1
-1
=====取模
1
-2
2
-1

符合預期

參考

編程語言中,取余和取模的區別到底是什么?
Java 中的取模和取余
java中的%取模


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM