C++ 負數取餘

轉自:https://www.cnblogs.com/widerg/p/7208041.html

真正說清了負數取餘的一篇好文!!!

C++負數取模

預習:

r=餘數

a=被除數

b=除數

c=商

a/b=c........r

r=a-(a/b)*b

 

一、下面的題目你能全做對嗎?
1.7/4=?
2.7/(-4)=?
3.7%4=?
4.7%(-4)=?
5.(-7)/4=?
6.(-7)%4=?
7.(-7)/(unsigned)4=?
答案:
1
-1
3
3
-1
-3
1073741822
如過你全部答對,你可以無視後面的內容……

 

 

 

 

 

二、除法的取整分類
除法的取整分爲三類:向上取整、向下取整、向零取整。
1.向上取整:向+∞方向取最接近精確值的整數。

在這種取整方式下,7/4=2,7/(-4)=-1,6/3=2,6/(-3)=-2
2.向下取整:向-∞方向取最接近精確值的整數。

在這種取整方式下,7/4=1,7/(-4)=-2,6/3=2,6/(-3)=-2
3.向零取整:向0方向取最接近精確值的整數,換言之就是捨去小數部分,因此又稱截斷取整。

在這種取整方式下,7/4=1,7/(-4)=-1,6/3=2,6/(-3)=-2
通過觀察可以發現,無論是向上取整還是向下取整,(-a)/b==-(a/b)都不一定成立。

這給程序設計者帶來了極大的麻煩。

而對於向零取整,(-a)/b==-(a/b)是成立的,以此,C/C++採用這種取整方式。

 

 

 

三、負數取模
回想小學的公式:被除數÷除數=商……餘數。
由此可知,餘數=被除數-商×除數 (*)
對C/C++而言,(*)式依然成立。並且,該式是解決負數取模問題的關鍵。
例一:7%(-4)=?
解:由C/C++向零取整的整除方式可知,7/(-4)=-1;

由(*)式知,餘數=7-(-4)*(-1)=3.所以,7%(-4)=3
例二:(-7)%4=?
解:由C/C++向零取整的整除方式可知,(-7)/4=-1;

由(*)式知,餘數=(-7)-4*(-1)=-3.所以,(-7)%4=-3
例三:(-7)%(-4)=?
解:由C/C++向零取整的整除方式可知,(-7)/(-4)=1;

由(*)式知,餘數=(-7)-(-4)*1=-3.所以,(-7)%(-4)=-3

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章