取模与取余的不同
通常情況下,我們對(duì)取余和取模混為一談,但是這兩個(gè)是不一樣的。我們?cè)赾 c++ java python里面都是用%表示取模或者取余的,但是我們分別用這四門語(yǔ)言去計(jì)算-1%3這個(gè)式子發(fā)現(xiàn)結(jié)果并不一樣,原因是在c c++ java里面%表示取余,而在python里面%表示取模。
在我們進(jìn)行計(jì)算的兩個(gè)數(shù)符號(hào)一樣時(shí),取余和取模的結(jié)果是一樣的,因?yàn)榉?hào)一樣時(shí)利用下面公式計(jì)算出來的a/b總是非負(fù)數(shù),也就是說這個(gè)時(shí)候無(wú)論事取余還是取模計(jì)算出來的c是一樣的,所以這里我們不在討論。
在進(jìn)行計(jì)算的兩個(gè)數(shù)符號(hào)不一樣時(shí),取余和取模的結(jié)果是不一樣的,究其原因是下面公式中在計(jì)算c的時(shí)候趨向不同。
對(duì)于整數(shù)a,b來說,取余和取模都有著下面這個(gè)關(guān)系:
1:求整數(shù)的商 c = a / b
2:計(jì)算模或者余數(shù) r = a - c * b
取余和取模的不同之處就是在c這里的不同,取余運(yùn)算我們是盡可能的向0方向舍去小數(shù)位,比如-1/3是-0.33333,我們就取c為0,然后計(jì)算r = -1 - 0 * 3,即r為-1;
取模運(yùn)算是盡可能向負(fù)無(wú)窮的方向舍去小數(shù)位,比如-1/3是-0.33333,我們就取c是-1,然后計(jì)算r = -1 - ( -1)?* 3,及c是2。
下面我們?cè)倥e一個(gè)例子 -7 % 4
1.這里a是-7, b是4,我們計(jì)算-7 / 4 = -1.75?
2.取余:盡可能向0舍去小數(shù)位,即c取-1?
? ?取模:盡可能向負(fù)無(wú)窮舍去小數(shù)位,即c取-2
3.取余:r = -7 - (-1) * 4,即 r 為 -3
? ?取模:r = -7 - (-2) * 4,即 r 為1
下面我們?cè)倥e一個(gè)例子 7 % -4
1.這里a是7, b是-4,我們計(jì)算7 / -4 = -1.75?
2.取余:盡可能向0舍去小數(shù)位,即c取-1
? 取模:盡可能向負(fù)無(wú)窮舍去小數(shù)位,即c取-2
3.取余:r = 7 - (-1) * (-4),即 r 為 3
? 取模:r = 7 - (-2) * (-4),即 r 為-1
下面我們分別是java?c c++ python的測(cè)試結(jié)果:
?
總結(jié)