java 取模與取余的區(qū)別說(shuō)明
取模與取余的區(qū)別
對(duì)于整型數(shù)a,b來(lái)說(shuō),取模運(yùn)算或者求余運(yùn)算的方法都是:
1.求 整數(shù)商: c = a/b;
2.計(jì)算模或者余數(shù): r = a - c * b
求模運(yùn)算和求余運(yùn)算在第一步不同: 取余運(yùn)算在取c的值時(shí),向0 方向舍入(fix()函數(shù));而取模運(yùn)算在計(jì)算c的值時(shí),向負(fù)無(wú)窮方向舍入(floor()函數(shù))。
例如計(jì)算:-7 Mod 4
那么:a = -7;b = 4;
第一步:求整數(shù)商c,如進(jìn)行求模運(yùn)算c = -2(向負(fù)無(wú)窮方向舍入),求余c = -1(向0方向舍入);
第二步:計(jì)算模和余數(shù)的公式相同,但因c的值不同,求模時(shí)r = 1,求余時(shí)r = -3。
歸納:當(dāng)a和b符號(hào)一致時(shí),求模運(yùn)算和求余運(yùn)算所得的c的值一致,因此結(jié)果一致。
當(dāng)符號(hào)不一致時(shí),結(jié)果不一樣。求模運(yùn)算結(jié)果的符號(hào)和b一致,求余運(yùn)算結(jié)果的符號(hào)和a一致。
另外各個(gè)環(huán)境下%運(yùn)算符的含義不同,比如c/c++,java 為取余,而python則為取模。
Java程序示例:
public static void main(String[] args) {
System.out.println("-3,2取模"+Math.floorMod(-3,2));
System.out.println("-3,2取余"+ -3%2);
System.out.println("3,-2取模"+Math.floorMod(3,-2));
System.out.println("3,2取余"+ 3%-2);
}
結(jié)果:
-3,2取模=1
-3,2取余=-1
3,-2取模=-1
3,2取余=1
補(bǔ)充知識(shí):java中的除法和取余注意點(diǎn)
1 整數(shù)除法中,除數(shù)為0,拋出一個(gè)算術(shù)異常ArithmeticException。整數(shù)取余運(yùn)算中,除數(shù)為0,拋出一個(gè)ArithmeticException異常。
如:
class Test
{
public static void main(String args[])
{
System.out.println(3/0);
System.out.println(3%0);
}
}
2 小數(shù)除法中,除數(shù)為0,輸出一個(gè)Infinity常量。小數(shù)取余運(yùn)算中,除數(shù)為0,拋出一個(gè)NaN常量。浮點(diǎn)數(shù)有無(wú)限值和Nan(非數(shù)值)概念。
如:
class Test
{
public static void main(String args[])
{
System.out.println(3.0/0);
System.out.println(3.0%0);
}
}
3 NaN是java語(yǔ)言中特有的數(shù),由Float 和 Double兩個(gè)封裝類提供,且不能把它作為一個(gè)普通數(shù)用于運(yùn)算中,如==運(yùn)算,NaN用于比較運(yùn)算中,不會(huì)顯示錯(cuò)誤,但都只輸出false。因此NaN只是通過(guò)調(diào)用isNaN()方法來(lái)判定是否一個(gè)東西是否數(shù)值;但在equals()方法中比較的是內(nèi)容,就看具體數(shù)據(jù)了。
如:
class Test
{
public static void main(String args[])
{
double x = 64.0;
double y = 0.0;
System.out.println(x%y == x%y);
}
}
顯示:false
如:
Double a = new Double(Double.NaN);
Double b = new Double(Double.NaN);
if(Double.NaN == Double.NaN)
System.out.println("True");
else
System.out.println("False");
if(a.equals(b))
System.out.println("True");
else
System.out.println("False");
顯示:false,true
而Infinity(極限數(shù))即可進(jìn)行比較,POSITIVE_INFINITY(正無(wú)窮)和NEGATIE_INFINITY(負(fù)無(wú)窮),可用于比較邏輯運(yùn)算中。
如:
class Test
{
public stativ void main(String args[])
{
System.out.println(Float.NaN == Float.NaN);
System.out.println(Float.POSITIVE_INFINITY == Float.POSITIVE_INFINITY)
}
}
顯示:false,true
3 在取余操作中,余數(shù)的正負(fù)符號(hào)完全取決于左操作數(shù),和作操作數(shù)的正負(fù)號(hào)一致。
如:
class Test
{
public static void main(String args[])
{
byte x = -64;
byte y = -6;
System.out.println(x/y + " " + x%y);
x = 64;
System.out.println(x/y + " " + x%y);
}
}
顯示:10,-4 -10 4
4 小數(shù)取余,用左邊的操作數(shù)連續(xù)減去右邊的操作數(shù),直到結(jié)果小于右邊的操作數(shù),此結(jié)果為余。即對(duì)商截去小數(shù)位后的運(yùn)算。
如:
class Test
{
public static void main(String args[])
{
double x = 64.5;
double y = 6.0;
System.out.println(x/y + " " + x%y);
}
}
顯示:10.75,4.5
以上這篇java 取模與取余的區(qū)別說(shuō)明就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
java數(shù)據(jù)結(jié)構(gòu)與算法之雙向循環(huán)隊(duì)列的數(shù)組實(shí)現(xiàn)方法
這篇文章主要介紹了java數(shù)據(jù)結(jié)構(gòu)與算法之雙向循環(huán)隊(duì)列的數(shù)組實(shí)現(xiàn)方法,結(jié)合實(shí)例形式分析了雙向循環(huán)隊(duì)列的原理與數(shù)組實(shí)現(xiàn)技巧,并附帶說(shuō)明了該算法的用途,需要的朋友可以參考下2016-08-08
JAVA多線程實(shí)現(xiàn)的四種方式及使用場(chǎng)景詳解
這篇文章主要介紹了JAVA多線程實(shí)現(xiàn)的四種方式及使用場(chǎng)景,并舉例說(shuō)明了在管理系統(tǒng)中多線程的應(yīng)用場(chǎng)景,如數(shù)據(jù)導(dǎo)入導(dǎo)出、數(shù)據(jù)緩存更新、并發(fā)用戶操作處理、系統(tǒng)監(jiān)控和定時(shí)任務(wù)執(zhí)行,需要的朋友可以參考下2025-01-01
詳解APP微信支付(java后臺(tái)_統(tǒng)一下單和回調(diào))
這篇文章主要介紹了APP微信支付(java后臺(tái)_統(tǒng)一下單和回調(diào)),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-05-05
java實(shí)現(xiàn)簡(jiǎn)單驗(yàn)證碼生成
這篇文章主要介紹了java實(shí)現(xiàn)簡(jiǎn)單驗(yàn)證碼生成,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-10-10
Java中EnumMap和EnumSet枚舉操作類的簡(jiǎn)單使用詳解
這篇文章主要介紹了Java中EnumMap和EnumSet枚舉操作類的簡(jiǎn)單使用詳解,EnumMap是Map接口的一種實(shí)現(xiàn),專門用于枚舉類型的鍵,所有枚舉的鍵必須來(lái)自同一個(gè)枚舉?EnumMap不允許鍵為空,允許值為空,需要的朋友可以參考下2023-11-11
SpringBoot單元測(cè)試使用@Test沒(méi)有run方法的解決方案
這篇文章主要介紹了SpringBoot單元測(cè)試使用@Test沒(méi)有run方法的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-01-01
簡(jiǎn)單談?wù)凧VM、JRE和JDK的區(qū)別與聯(lián)系
簡(jiǎn)單的說(shuō)JDK是用于開(kāi)發(fā)的而JRE是用于運(yùn)行Java程序的。JDK和JRE都包含了JVM,從而使得我們可以運(yùn)行Java程序。JVM是Java編程語(yǔ)言的核心并且具有平臺(tái)獨(dú)立性。2016-05-05
idea項(xiàng)目打開(kāi)后出現(xiàn)橙色的時(shí)鐘圖標(biāo)的解決
本文主要介紹了idea項(xiàng)目打開(kāi)后出現(xiàn)橙色的時(shí)鐘圖標(biāo)的解決,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-06-06
spring boot實(shí)現(xiàn)驗(yàn)證碼功能
這篇文章主要為大家詳細(xì)介紹了spring boot實(shí)現(xiàn)驗(yàn)證碼功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-07-07

