首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Python中的运算

所谓取运算,就是计算两个数相除之后的余数,符号是%。如a % b就是计算a除以b的余数。...实际上,虽然结果不一样,不过取运算完全遵从统一的规则: a \% b = a- \lfloor\frac{a}{b}\rfloor * b 其中\lfloor\frac{a}{b}\rfloor表示...-5) = -4 虽然知道结果是如何计算出来的,不过人脑不比电脑,这样计算未免太复杂,为避免给大脑增加负担,再根据上面的规则,这里我总结了一个简单的记忆方法: 对于不带负号的,2个数字都是正数的,直接结果...M: 2个数都是负数,直接等于-M 被除数是负数,除数是正数,由于是向下舍入,最后相当于会多加上一个K,也就是说一定是大于0的,结果是K-M 被除数是正数,除数是负数,刚好相反,结果是M-K,注意这里的...K是除数的绝对值,是正数 简单归纳: 不管有没有负数,先按正数得到M 2个数都为负数,结果是-M 只有1个数为负数,负数在上,记住结果一定是正的,大数-小数(除数-余数),那么就是K-M 只有1个数为负数

1.4K30

python 负数取运算实例

也可以换个思路想, -340%60 =(比340大的那个可以被60整除的正整数) – 340 = 360 – 340 = 20 举例: 1%3 = 1 -1%3 = 2 补充知识:python中对负数余的计算方法和运算注意点...python中对负数余的计算方法 1....整除运算(除法计算出结果后,向下取整) 使用整除运算用 // 1 // 2 0 3 // 2 1 10 // 3 3 10 // -3 -4 10 / 3 = 3.3333 故:10 // 3中对3.333...在上面已经计算过 10 % -3 = 10 – (-4)(-3) = 10 – 12 = -2 -10 % 3 = 2 10 % 3 = -10 – (-4)*3 = -10 + 12 = 2 运算中需要注意的一点...3.运算用 ** -3 ** 2 -9 (-3) ** 2 9 乘方运算符的优先级比负(-)高,先乘方后负 以上这篇python 负数取运算实例就是小编分享给大家的全部内容了,希望能给大家一个参考

2.7K20
您找到你想要的搜索结果了吗?
是的
没有找到

使用位运算替代运算

昨天的分析HashMap原理的文章里面提到,使用位运算替代取运算效率高,但位运算只能在特定场景下才能替代%运算。...正常情况下: 但如果b的值为2的n次方的时候(n为自然数),这时候就可以用位运算来替代运算, 转化如下: 2的n次方的二进制如下: 从上面能看到左移一位是放大2倍,右移一位是缩小2倍 分别减一后的二进制...举例 我们算下11%8的, 11的二进制是:1011 代入上面的公式: 7的二进制: 0111 二者做&(与)运算 ,回忆下运算规则: 结果: 1011 & 0111 = 0011 转化成10进制后...=3 所以11%8=3 这种方法只是适合于一个数除以二的N次冥才正确,的过程,就是2^n-1的中1的个数就是n的值,再与a做&运算,得出来的低位就是我们期望的余数。

1.8K50

你真的了解运算吗?

cout << getMapCode(i, -3) << "\n"; } 问题其实就出在运算(%)上: 左移操作由于使用了负数的偏移,导致了负数取运算,而对于负数取,Lua和C/C++的结果是不一致的...我们先从运算的定义说起~ r = a - I(a / b) * b 其中a为除数,b为被除数,r即为运算的结果,即余数,而I(…)代表的是取整函数,取整函数不同,取结果自然也就不同 对于Lua,I...,自然程序的结果也就不会正常了~ 知道了程序出错的原因,“修复”起来也就有了对策,方法很简单,自己实现一个使用Floor的取运算即可~ const char codeTable[] = { 'a',...cout << getMapCode(i, -3) << "\n"; } 值得一提的是如果你使用Lua中math.fmod来计算 -1 % 5 的话,结果和C/C++中是一致的,为 -1 总结 运算看似简单...,但其实大家不一定真正了解,这里有一段Python中关于运算怎么实现(同Lua一样,也使用了Floor取整)的讨论,有兴趣的朋友可以看下~ OK,下次再见吧~

40530

% 不是取运算符?

这还要从一道题目说起:如图,为什么在 Python 中 -17 % 10 = 3 ? 大家可以直接看下面的解释,他说的不完全对,最后会解释原因。 ?...第一步:先c = a / n,结果是 -2(向负无穷方向舍入) 和 -1(向0方向舍入); 第二步:计算和余数的公式相同,但因 c 的值不同,时r = 3,余时r = -7。...总结:当a和n符号一致时,运算运算所得的c的值一致,因此结果一致。当符号不一致时,结果不一样。运算结果的符号和n一致,运算结果的符号和a一致。...各个环境下 % 运算符的含义不同,比如 C/OC/C++,Java 中为取余,而 Python 则为取。 所以我们的疑惑就解开了,因为在 Python 中 % 是取,而在 Java 中为余。...因为不是 Python 规定的向负无穷取整,而是取运算就是往负无穷取整,在 Python 中 % 是取运算,而在那几个语言中是取余运算。 个人理解,如有疏漏请指出。

1.7K20

Super Pow:如何高效进行运算

你怎么把这个数组作为指数,进行运算呢? 二是如何得到之后的结果?按道理,起码应该先把幂运算结果算出来,然后做% 1337这个运算。...不考虑的要求,以b = [1,5,6,4]来举例,结合指数运算的法则,我们可以发现这样的一个规律: 看到这,我们的老读者肯定已经敏感地意识到了,这就是递归的标志呀!...换句话说,对乘法的结果,等价于先对每个因子都,然后对因子相乘的结果再。 那么扩展到这道题,一个数的幂不就是对这个数连乘么?...所以说只要简单扩展刚才的思路,即可给幂运算: int base = 1337; // 计算 a 的 k 次方然后与 base 的结果 int mypow(int a, int k) {...但是既然说到幂运算了,不妨顺带说一下如何高效计算幂运算吧。 如何高效幂 快速幂的算法不止一个,就说一个我们应该掌握的基本思路吧。

80250

Super Pow:如何高效进行运算

你怎么把这个数组作为指数,进行运算呢? 二是如何得到之后的结果?按道理,起码应该先把幂运算结果算出来,然后做% 1337这个运算。...不考虑的要求,以b = [1,5,6,4]来举例,结合指数运算的法则,我们可以发现这样的一个规律: ? 看到这,我们的老读者肯定已经敏感地意识到了,这就是递归的标志呀!...换句话说,对乘法的结果,等价于先对每个因子都,然后对因子相乘的结果再。 那么扩展到这道题,一个数的幂不就是对这个数连乘么?...所以说只要简单扩展刚才的思路,即可给幂运算: int base = 1337; // 计算 a 的 k 次方然后与 base 的结果 int mypow(int a, int k) {...但是既然说到幂运算了,不妨顺带说一下如何高效计算幂运算吧。 如何高效幂 快速幂的算法不止一个,就说一个我们应该掌握的基本思路吧。利用幂运算的性质,我们可以写出这样一个递归式: ?

1.5K10
领券