前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >% 不是取模运算符?

% 不是取模运算符?

作者头像
wsuo
发布2020-07-31 15:40:14
1.7K0
发布2020-07-31 15:40:14
举报

为什么我问这个问题,因为我今天才发现不同语言中 % 的含义是不同的,因为我是主学 java 的,一直以为 % 就是取模,但是我错了。

这还要从一道题目说起:如图,为什么在 Python 中 -17 % 10 = 3

大家可以直接看下面的解释,他说的不完全对,最后会解释原因。

假设 r = a - n * [a / n],重点在 a / n,该怎么算,这里就是 -17/10,结果是-1.7,那么按照 -2 算还是按照 -1 算呢?

我们先留着不说,先来看一下取模和取余的区别:

  • 取余,遵循尽可能让商 向0靠近 的原则,fix()
  • 取模,遵循尽可能让商 向负无穷靠近 的原则,floor()

第一步:先求c = a / n,结果是 -2(向负无穷方向舍入) 和 -1(向0方向舍入);

第二步:计算模和余数的公式相同,但因 c 的值不同,求模时r = 3,求余时r = -7

总结:当a和n符号一致时,求模运算和求余运算所得的c的值一致,因此结果一致。当符号不一致时,结果不一样。求模运算结果的符号和n一致,求余运算结果的符号和a一致。

各个环境下 % 运算符的含义不同,比如 C/OC/C++Java 中为取余,而 Python 则为取模。

所以我们的疑惑就解开了,因为在 Python 中 % 是取模,而在 Java 中为求余。两者的区别就在于是往0取整(取余)还是负无穷取整(取模)。

为什么那个人的回答不全对呢?因为不是 Python 规定的向负无穷取整,而是取模运算就是往负无穷取整,在 Python 中 % 是取模运算,而在那几个语言中是取余运算。

个人理解,如有疏漏请指出。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-05-18 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 大家可以直接看下面的解释,他说的不完全对,最后会解释原因。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档