一.引入
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
Copy
C++
如过你全部答对,你可以无视后面的内容……
二.除法的取整分类
除法的取整分为三类:向上取整、向下取整、向零取整。
向上取整:向+∞方向取最接近精确值的整数。在这种取整方式下,
向下取整:向-∞方向取最接近精确值的整数。在这种取整方式下,
向零取整:向0方向取最接近精确值的整数,换言之就是舍去小数部分,因此又称截断取整。在这种取整方式下,
通过观察可以发现,无论是向上取整还是向下取整,都不一定成立。这给程序设计者带来了极大的麻烦。而对于向零取整,(-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