Utility中如何实现负数取模
这篇文章主要为大家展示了"Utility中如何实现负数取模",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"Utility中如何实现负数取模"这篇文章吧。
最近在跟孩子学习表内除法,想到一个问题:C语言里怎样处理负数取模?
表内除法:12÷4=3
整数除法:13÷4=3…1
整数整除:13/4是等于3吗?
负数取模:-13%4等于多少?13%-4呢?-13%-4呢?
先看看整除。明明除不尽,又要求结果是整数,一般有这样几种方法:
向上取整(Ceiling),即向+∞靠齐,也就是取比浮点数结果稍大的最小整数。那么:13/4=4;-13/4=-3;15/4=4;-15/4=-3。
向下取整(Floor),即向-∞靠齐,也就是取比浮点数结果稍小的最大整数。那么:13/4=3;-13/4=-4;15/4=3;-15/4=-4。
四舍五入(Round),即整数结果与浮点数结果的差值不超过0.5;差值为0.5时,取绝对值较大的整数。那么:13/4=3;-13/4=-3;15/4=4;-15/4=-4。
向零取整(Truncate),即向0靠齐,也就是舍去小数部分。那么:13/4=3;-13/4=-3;15/4=3;-15/4=-3。
而C语言里的整除,采用的就是向零取整(Truncate)。
再来看取模。不管哪种整除操作,都会符合公式:被除数÷除数=商…余数,所以:余数=被除数-除数*商。
那么C语言里取模就是:
13÷4=3…1;-13÷4=-3…-1;13÷-4=-3…1;-13÷-4=3…-1
15÷4=3…3;-15÷4=-3…-3;15÷-4=-3…3;-15÷-4=3…-3
规律就是:余数与被除数同符号
看来这四则运算里,除法比其它三项复杂多了
以上是"Utility中如何实现负数取模"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!