python中整数除法的正负号 python 除法保留整数
来看一下运算结果:(1)7//3 = 2, 7%3 = 1 这个没什么好说的,会做除法的都知道。
(2)7//-3 = -3, 7%-3 = -2 疑问:为什么不是这样的结果:7//-3 = -2, 7%-3 = 1(C语言里面是这个结果)
(3)-7//3 = -3, -7%3 = 2 疑问:为什么不是这样的结果:-7//3 = -2, -7%3= -1 (C语言里面是这个结果)
(4)-7//-3 = 2, -7%-3 = -1 这个也没什么太大问题,而且C语言里面也是这样的。
现在问题出来了,如果除数和被除数同为正数或者同为负数,结果没有什么争议(最起码我这没有)。但是如果除数和被除数正负号不同,那么python和c里面的计算结果就出现差异了,怎么理解呢?
我个人更喜欢python的计算结果(好吧,我不知道有没有什么标准来规定这个,但是就目前来说,我还是更喜欢python的结果,因为我理解起来更容易一些)。下面是我的一点想法:
这样来看,a 除以 b (我一向分不清除以、除、被除数、除数神马的,反正我这说的就等于C里面的a/b):这个题目的意义就是,计算数字a里面包含有多少个b,我觉得这就是除法的意义。那么余数的概念就可以引申出来了,如果a并不是b的整数倍,那么除法之后肯定会有剩余的,也就是余数。
假设a有这么大:a:|-----------------------------------------------------------------------------------|然后b有这么大:b: |-----------------------|
我们把b多copy几份,然后跟a比比:a:|-----------------------------------------------------------------------------------|3b: |-----------------------|-----------------------|-----------------------|余数 |-----------|看上面的图,a里面能包含3个b,所以3就是除法结果,剩下的那一块,就是余数。我是这么理解的,余数,就是范围在b以内的那一部分,它不够一个b的大小了。
那么这里就又有问题了,余数的范围“在b以内”,又是什么意思?
好吧,我喜欢0这个数字(一般我会理解为原点),“在b以内”,那就是在区间(0,b)内(这里b是正数),当然如果b是负数,那这个范围就是(b, 0)。
按照这个理解,7除以-3,余数范围一定是在(-3, 0)内;而-7除以3,余数范围一定是在(0, 3)内。就是这个结果:7除以-3,商为-3,余数为-2;-7除以3,商为-3,余数为2.
好吧,罗嗦这么多,其实就是为了说明余数的范围是在(0, b)或者(b, 0)之间,没有什么特别的意义。
当然如果你就认为余数的范围更广,比如 |余数| 在范围 (0,|b|)之间,那么我上面说的就都没有用了,不同的理解方式而已,没有对与错的区别。(顺便提一句,上面的两条竖线表示数学中的绝对值)
最后,C语言的那个商和余数的正负号,我还是没有理解,印象中以前写过分析的笔记,类似于同号为正,异号为负之类的东西,但是说实话,我记不住那个规律。
最后的最后,我觉得这个东西的争论是没有意义的,不同的理解方式,知道分别是怎么回事就行了,至于谁对谁错嘛,反正把商和余数填进式子里发现结果都是正确的,不是吗?
————————————————————————————————————————————————
那个啥,我又回来了,因为我发现了一点小问题:
7除以-3,可以(商:-2,余数:1),也可以(商:-3,余数-2)。在python里面,结果是(商:-3,余数:-2)。也就是说,余数取“0和除数”之间的那个(这里就是0和-3之间的,因此余数选-2,而不是1)。在C里面,结果是(商:-2,余数:1)。也就是说,余数取“更靠近0”的那个(这里就是1,因为它比-2距离0更近一点)。
再看另外一个:-7除以3,可以是(商:-2,余数:-1),也可以是(商:-3,余数:2)。在python里面,结果是(商:-3,余数:2)。同样的,余数又是取的“0和除数”之间的那个(这里就是0和3之间的,因此余数是2,而不是-1)。在C里面,结果是(商:-2,余数:-1)。再一次看到,余数是“更靠近0”的那个(这里的-1要比2距离0更近一些,不是吗?)
包含负号的还有另外一个情况,那就是除数和被除数都是负数,我们再来看看这种:-7除以-3,可以是(商:2,余数:-1),也可以是(商:3,余数:2)在python里面,结果是(商:2,余数:-1)。再次符合我们的推论,余数取“0和除数”之间的那个(这里就是0和-3之间的,因此是-1,而不是2)。在C里面,结果是(商:2,余数:-1)。很难得,两种语言中的计算结果居然是一样的。仔细看,这也符合我们对C语言中的推论:余数是“更靠近0”的那个,因为这里的-1比2更靠近0.
综合以上的例子,我做了下面这样一个推论(至少目前我就这样来理解C和python中的除法运算结果了):
在python中,如果做除法运算后,余数有多个选择(一般最多也就两个),那么余数应该选择“0和除数”之间的那个。而在C中,如果做除法运算后,余数有多个选择(一般最多也就是两个),那么余数应该选择“更靠近0”的那个。
而在确定了余数之后,商是什么就已经确定了,因此答案也就知道了。
这次是真的写完了(一大篇乱七八糟的,其实只看最后的那两句红色部分就行了,但是我就是不提前告诉你们,重走一下我走过的弯路吧,挺好的不是吗?)
PS:谁能告诉我,为什么我电脑上的google拼音时不时的就调不出来了,切换输入法之后凋出来的是微软拼音,怎么搞?
更多阅读
验证数字的正则表达式 正则表达式是否是数字
验证数字:^[0-9]*$验证n位的数字:^d{n}$验证至少n位数字:^d{n,}$验证m-n位的数字:^d{m,n}$验证零和非零开头的数字:^(0|[1-9][0-9]*)$验证有两位小数的正实数:^[0-9]+(.[0-9]{2})?$验证有1-3位小数的正实数:^[0-9]+(.[0-9]{1,3})?$
电脑上怎么打出正负号±?正负号的打法。 电脑电源改正负
电脑上怎么打出正负号±?正负号的打法。——简介许多朋友对于很多特殊符号都不会打,今天小编分享一下如何打出正负号,正负号±怎么才能打出来呢?小编介绍三种方法。电脑上怎么打出正负号±?正负号的打法。——正负号的打法电脑上怎么打
中国有排除万难的决心与能力:东方时事评论|2014-11-29
中国有排除万难的决心与能力 (2014-11-29)美财长敦促欧洲采取更多行动提振经济【综合消息】据媒体报道,美国财政部长杰克·卢警告,欧洲经济或将面临“失去的十年”。针对欧洲经济前景,美国财长这一严厉措辞十分罕见。杰克·卢表示,欧
毕业照,你的正装准备好了吗 你准备好了吗英文
毕业在即,你的正装在哪里?毕业生只有在面试官面前充分的展现出自己的沉稳、成熟和睿智,才会受到青睐,最终更有机会拿到自己心仪已久的职位,能力相差无几的人,用什么来区分呢?那就是自己的着装打扮,让面试官的脑海里有中“专业、亲切”的感
±正负号怎么打出来 正负号怎么打出来
±正负号怎么打出来——简介朋友问正负号上下一起怎么打,±表示正或负,打出正负号的方法有好几种,最简单的就是直接用拼音输入,下面小编就和大家一起学习打出正负号的方法。±正负号怎么打出来——方法/步骤±正负号怎么打出来 1、适合