前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Utility之负数取模

Utility之负数取模

作者头像
Taishan3721
发布2020-01-02 10:40:13
1.5K0
发布2020-01-02 10:40:13
举报
文章被收录于专栏:这里只有VxWorks这里只有VxWorks

最近在跟孩子学习表内除法,想到一个问题: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

规律就是:余数与被除数同符号

看来这四则运算里,除法比其它三项复杂多了

想到一个段子:为什么古龙先生取名字经常用数字,而且多是奇数?例如绝代双骄的轩辕三光、七杀手的龙五、欢乐英雄的燕七、武林外史的朱七七、凤舞九天的宫九、萧十一郎、三少爷的剑的燕十三、碧血洗银枪的无十三、风铃中的刀声的彭十三豆。。。 这样显得很厉害,因为很难除

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-12-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 这里只有VxWorks 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档