Java別說取余(%)運算簡單你真的會嗎
一,直擊現(xiàn)場
下面我來拋出幾道題:
說明m是商,n是余數(shù);
(1)正數(shù)%正數(shù)
3%2=m…….n
2%3=m…….n
(2)正數(shù)%負(fù)數(shù)或者負(fù)數(shù)%正數(shù)
-3%2=m…….n
3%-2=m…….n
-2%3=m…….n
2%-3=m…….n
(3)負(fù)數(shù)%負(fù)數(shù)
-3%-2=m…….n
-2%-3=m…….n
二,驗證時刻
下面的結(jié)果沒有商m只有余數(shù)n;有沒有全部答對呢?沒有的話來看總結(jié)吧
三,總結(jié)
(1)
3%2=1…….1
2%3=0…….1
正數(shù)除以正數(shù):
商正余正
(2)
-3%2=-1…….-1
3%-2=-1…….1
-2%3=0…….-2
2%-3=0…….2
除數(shù)或者被除數(shù)其中之一為負(fù)數(shù):
先按正數(shù)計算,商負(fù)余同被除數(shù)
(余數(shù)和被除數(shù)同號)你可能對結(jié)果0有疑問,你可以把它當(dāng)成負(fù)0,因為被除數(shù)=除數(shù)*商+余數(shù),所以被除數(shù)是希望商乘以除數(shù)的結(jié)果是接近它的(如最后一組數(shù)被除數(shù)2是希望-3乘以0后的結(jié)果是接近它的,所以可以理解為0是負(fù)0,這樣就普遍適用了)
(3)
-3%-2=1…….-1
-2%-3=0…….-2
兩個數(shù)都是負(fù)數(shù):
先按正數(shù)計算,商正余負(fù)
(對于第二組可理解為0是正0,解釋同上)
關(guān)于Java負(fù)數(shù)取余和取模的計算
今天和同事聊到Java的取模(mod)和取余(rem),發(fā)現(xiàn)我們常用的基本都是正數(shù)取余或取模,那帶有負(fù)數(shù)的要怎么計算呢。
大部分的資料都會說:當(dāng)x和y的正負(fù)相同,取余和取模結(jié)果相同,當(dāng)x和y正負(fù)不同,取余結(jié)果的符號和x相同,取模結(jié)果的符號和y的符號相同。
但是這只是說了下結(jié)果的正負(fù),要怎么計算呢???
假設(shè):被除數(shù) a 除數(shù) b 商c 余數(shù)d 公式 a/b=c...d 可以變形為 d=a-b*c
那么關(guān)鍵就在于這個c取什么值。
舉個栗子:a=5,b=-2 ,那么 5÷(-2)=-2.5
取模的時候,因為mod 函數(shù)采用了 floor 函數(shù),floor函數(shù)是向下取整的,所以-2.5向下取整就是-3,那么d=5-(-2)*(-3)=5-6=-1。
取余的時候,因為rem 函數(shù)采用 fix 函數(shù),fix函數(shù)是向0取整的,所以-2.5向0取整就是-2,那么d=5-(-2)*(-2)=5-4=1。
OK!曉得了!
關(guān)于 Java 運算中的求余 % 運算,這里負(fù)數(shù)到底怎么算。
剛好他們用代碼做了舉例,下面兩張圖的控制臺都有輸出結(jié)果。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
MyBatis/mybatis-plus項目打印SQL的方法實現(xiàn)
SpringBoot項目中,經(jīng)常需要打印SQL語句及其參數(shù),本文就來介紹一下MyBatis/mybatis-plus項目打印SQL的方法實現(xiàn),具有一定的參考價值,感興趣的可以了解一下2024-07-07Java 對象序列化 NIO NIO2詳細(xì)介紹及解析
這篇文章主要介紹了Java 對象序列化 NIO NIO2詳細(xì)介紹及解析的相關(guān)資料,序列化機制可以使對象可以脫離程序的運行而對立存在,需要的朋友可以參考下2017-02-02MyBatis學(xué)習(xí)教程(七)-Mybatis緩存介紹
MyBatis緩存分為一級緩存和二級緩存一級緩存,本文給大家介紹mybatis緩存知識,非常不錯具有參考借鑒價值,感興趣的朋友一起學(xué)習(xí)吧2016-05-05java如何接收和發(fā)送ASCII數(shù)據(jù)
這篇文章主要介紹了java如何接收和發(fā)送ASCII數(shù)據(jù)問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-09-09