一、原由
昨晚上,写代码时突然想到正整数与负整数的取模问题,然后就用某度一翻搜索!终究某度速度快嘛,还是要用一用的,别鄙视我…就是答案五花八门。也不知道哪个答案是正确的。没法了,那就试试吧。然后在笔者电脑上已有的几个编程语言中一翻测试。得到了一个略有价值的答案。
二、分享一下
本着互联网共享精神,看到不少人也在纠结此问题,就准备分享一下!笔者前面的博文中已多次提出对于那些复制、粘贴,在互联网上乱写乱画的人痛恨!这类人简直就是互联网LJ生产者。所以回答的时候略有怼了一下此类人物,当然!笔者不是以骂人为乐的,虽然有怼,但也只是针对说此类人的行为,没奔着人身攻击去。下面会给出在某度知道的原文:
1、题主的问题:
原链接:https://zhidao.某度.com/question/607073436.html?entry=qb_uhome_tag
2、某大流量帐号的回答
在笔者之前的(目前可能是最后一个,因为笔者的回答被删了,也是得赞最高的)一个回答是:
顺便说一下:此号取名为XXXX教育!此号在此这之前得了73.6万个赞!!!
事实上,不能说此回答不学无术吧~ 至少9除8取模为1应该在绝大部分编程语言中是对的。但看看后面的话21除7的模就是3! 再回头看9除8,此人显然认为取模就是商取整!9除8是正好因为商取整和余数均为1,让他举例举对了!至少说明此人对模运算有所误解!
申明:本人自多渠道得到的知识取模运算在C、JS、python中均为符号%
如有错请各位看官一定留言指正!不甚感激!
3、笔者的回答
本着“侠之大者,为网为民”,“路见不平一声吼” 等等大侠精神!前一句为玩笑!别怼我!笔者是这样回答的:
楼上不懂别来祸害人,乱扯一通!还取名什么教育!取模是计算机方面的术语,常用于奇偶判断,素数计算等。取余是数学概念。在正整数范围来看,取模和取余是相同的,结果一致,用小学生的话说,就是计算余数。当负数参与时,取模和取余虽然还是计算余数,但计算结果就不一定相同了!以你的21除3为例,取模和取余结果都是0,22除以7的模是1,余数自然也是1。
以计算机语言python来看取模:python本身有取模运算符%,-7%4的结果为1。7%-4=-1。从这个结果来看和数学概念的余数是不同的。不过有一点,python的模运算是这样,用其它计算机语言得出的结果也不一定相同。在js中-7%4=-3,7%-4=3。虽然不同语言的计算结果不同,但它们与数学概念中的余数是有区别的。
虽然不同语言的模运算结果不同,但大部分时间使用时是没差的。比如我们需要判断一个变量x是否为偶数,python为例:
def is_even(x):
if x%2==0:
return True
else:
return False
在js中可以这么写:
function is_even(x){
if (x%2==0)
{return true}
else
{return false}
}
有图为证:
当然已经被删掉了!谁让我去怼一个超级流量巨星呢…
三、一点感想
事实上,在发布回答前,我不仅在python中测试中了和利用在线js编辑器测试。我还在C、C++中也做了测试:
上图结果为3
就这一么一个再三测试的回答!竟然被删了!当然删就删了,我也不那么在乎某度知道,我那帐号还是用验证码找回来的,只是觉得我费那么大劲找回帐号,发了一个自认比较靠谱的回答,结果如下:
也没给我一个理由,笔者猜测是影响楼上那位大V大流量的大人物了吧~
某度工作人员心理活动:你个小B3,竟敢怼我们XX大v,这可是我们的流量保证,我们就靠着他瞎扯谈吃饭的!滚你的~
不是我这么黑暗,而是我实测了一下!我申诉了,秒申,秒删!
四、继续取模的问题
这段本来就是准备发在这的,关于为什么不同语言结果不同的一点想法。某度知道显然不是发这个的好地方。昨天晚上就压着没写!因为发现被删了,就啰嗦了前面一大堆,也顺便说清事情来龙去脉了!
记忆中(不保真)小学数学教材中对余数的定义大致是:余数是自然数,取值范围为0到除数之间。很显然这只适用于小学正整数除法!
从实数的角度来看,事情就复杂得多了,这里不讨论数学!
因为一时半会找不到资料证明我上述的记忆中的定义,所以没写在某度知道中。多说一下:从二个程序得出不同结果,也证明了取模和余数是不同的,因为数学是严谨的!编程语言是为了解决问题的数学运用!再者,前一位大v的回答压根就搞错了概念!
那么为什么两个语言得出的结果不同呢?
猜测是取整数商运算时,二个语言向不同的方向取整了。如:
-7/4,结果为:-1.75,python向下(负无穷方向)取整,结果为-2,那么 -7 -(-2*4),结果余数为1,c语言和js语言向上(向0的方向)取整,结果为-1,余数= -7 - (-1 * 4),结果为-3
五、总结一下
以上纯为笔者个人实际测试,保证经过测试!
从以上来看,如果笔者记忆中的余数定义没错,C语言的取模更接近数学的余数,当然在实际使用中,取模往往用于判断是否整除,这种用法结果并不重要!编程语言中,算出结果和数学概念不一致的情况可不仅仅是模运算!
最后,请某度知道做个人吧~ 好的产品才会有更多的人来使用!流量是一时的,当互联网LJ多了,用户找不到有用的信息时,自然会用脚投票的!
在此也真诚的希望各位内容生产者,别内卷出这些LJ内容!当整个互联网环境被破坏了,大家都没饭吃!