
Python模运算:时钟法则解密 0
Python模的计算有时令人困惑,包括我自己。这里总结一下它的计算方法,以防将来连自己也忘掉了。
模计算的一般表达式是 a % b = c,这里a, b, c为整数。我没研究过小数的模计算,也没见过(可能根本就没有)。
先看几个简单的例子:1 % 1 = 0,2 % 2 == 0。它可以用于表示a除以b的余数。按这种逻辑,a % b (b = n*a, a, b,n 为正整数或0)永远都是0。比如:2 % 1 = 0,4 % 2 = 0。这是正整数(含0)计算结果为0的情况。
再看不为零的情况:1 % 4 = 1, 2 % 4 = 2, 3 % 4 = 3;4 % 3 = 1,5 % 3 = 2;7 % 3 = 1,8 % 3 = 2。我们发现计算结果呈现重复现象,就像时钟一样:1、2、3、1、2、3…,没错,就是时钟。如果我们把b设为12,就可以模拟出与时钟完全一样的结果:1 % 12 = 1, 2 % 12 = 2,…, 11 % 12 = 11,13 % 12 = 1, 14 % 12 = 2,… 23 % 12 = 11。 你可以在心中默念:上午1点、上午2点,上午11点、…下午1点、下午2点、下午11点。循环反复,周而复始。这不就是一个时钟吗?如果有人告诉现在是23点,你马上会想到是下午(晚上)11点,速度快到你根本不用想,因为这在日常生活中太常见了,你在大脑中已经形成了肌肉记忆。
当b不为12时,情况就变得不那么直观了,特别是当出现负数时,情况变得复杂起来。但是别紧张,按照“时钟”的解题方法,一样能使问题迎刃而解。心里永远装着一个时钟,这是模运算的关键。如果你愿意,你可以每次在做这种运算时在纸上画一个“挂钟”,就像你家里墙上挂的电子石英钟一样。钟的刻度根据你的需要来画。这非常有助于你进行计算。
我们来看几个例子:
3 % 7 = 3, 8 % 7 = 1。计算结果为何如此,显而易见,无须多说,我们只需把它们理解为只有7个小时、8个小时的时钟你就明白了;
3 % -1 = 0,3 % -2 = -1。这里我们把负数当成一个镜像的时钟,或逆着走的时钟,或干脆叫逆时钟。-1 表示反着的只有1个小时的时钟,时针顺方向走了三圈,又回到0点,所以结果是0;-2表示反着的只有2个小时的时钟,时针顺方向走了1圈加1个小时,对于逆时钟来说,就是-1点,所以结果是-1。
再看几个例子:
5 % -8 = -3,5 % -9 = -4。对比 5 % 8 = 5, 5 % 9 = 5,你会不会脑子开始有点迟钝了?记住:时钟,时钟而矣。时针顺时针方向走了5个小时,可不就是只有8个小时的“逆时钟”的-3点吗?同理,时针顺时针方向走了5个小时,可不就是只有9个小时的“逆时钟”的-4点吗?
以此类推:
9 % -8 = -7, 12 % -9 = -6。哇,我希望你的大脑还没有打结。很好理解:对于 9 % -8,同样是一个只有8个小时的“逆时钟”,时针顺时针走了一圈加1个小时,对于只有8个小时的“逆时钟”来说,就是-7点,所以结果就是-7;同理,对于12 % - 9,时针顺时针走了一圈加3个小时,对于只有9个小时的“逆时钟”来说,就是-6点,所以结果就是-6。
再来几个例子:
11 % -8 = -5, 23 % -8 = -1。这里我就不作过多解释了,如果你把时钟放在心里,相信聪明的你一定比我算得还快。
由此可见,随着时针转的圈数变大,结果也越来越不那么直观了。但只要使用“时钟”法,很容易算出结果。
现在,轮到大boss出场。如果时针是逆时钟方向走的会怎么样?看下面的例子:
-8 % 7 = 6,-16 % 7 = 5。看到这个结果,估计你可能有点怀疑它是不是有问题?结果没有问题,模运算就是这么反直觉的。这里,对于一个只有7个小时的正常时钟(“顺时钟”),时针逆时针方向走了一圈加1个小时,不就是只有7个小时的时钟的6点钟吗?同理,对于一个只有7个小时的正常时钟(“顺时钟”),时针逆时针方向走了两圈加2个小时,不就是只有7个小时的时钟的5点钟吗?
这里要提醒注意一下,操作符“%”两边的数的正负号与计算结果的正负号也是“反直观”的。它与一般的四则运算不一样。只有右边那个数的符号才能决定结果的正负号,即“顺时钟”的结果为正,“逆时钟”的结果为负,不管时针是顺时走还是逆时走。
最后,如果时钟及时针都是反的会怎么样?看下面的例子:
-8 % -9 = -8,-11 % -9 = -2,-19 % -9 = -1 。这个反而是最好计算的。你就把它当成如下例子的完全翻转(镜像):
8 % 9 = 8, 11 % 9 = 2, 19 % 9 = 1。当然,你也可以用我上面讲的”时钟计算法“来计算,结果也一样。
总结:
模运算遵循”时钟计算法“,时钟的类型(顺时或逆时)决定结果的正负,全正与全负的计算结果数值 一样,正负相反。
数学领域的模运算是不是一样的呢?我没研究,我判断必须一样,不然发明编程软件的人一定是过份聪明以为自己比数学家还要厉害。那是不可能的。其次,除了python,Ruby(我很喜欢的一门编程语言,可以说最喜欢,可惜快要作古了)的模运算也是一样的。至于其它编程语言,例如c/c++,java等,大概也是一样的吧。
相关阅读
MetaAI登陆iPhone新动态(2025-05-01)
Meta推出iPhone专属AI应用,集成Llama 4模型并提供增强语音功能。Mastercard与银行合作推出Agent Pay,简化AI平台交易流程。研究人员因秘密使用AI机器人渗透Reddit论坛引发争议。Meta新AI应用新增社交功能,支持用户分享AI使用体验。传闻iPhone 18将配备六通道内存以提升AI性能。Meta首届生成式AI开发者大会LlamaCon 2025开幕,Zucke...
最新AI行业动态速览(2025-04-30)
Meta举办了首届生成式AI开发者大会LlamaCon,CEO与微软CEO进行了对话。三星One UI 7.0升级相机功能,新增AI滤镜和专业工具。研究发现AI生成的代码可能引用不存在的库,带来供应链安全风险。初创公司Grouphug开发了基于WhatsApp聊天记录生成表情包的应用。城市建设游戏Manor Lords计划改进AI系统。Bloomberg研究指出RAG技术可能降低大模型安全性。华为...
思科英伟达联手加速AI数据中心
思科与英伟达近日宣布合作,旨在加速企业级AI数据中心基础设施的部署。合作内容包括:1)联合开发AI优化以太网解决方案,思科将基于英伟达的Spectrum-X平台设计数据中心交换机,整合Silicon One芯片与SuperNICs,构建高性能、低延迟的网络架构;2)通过统一架构实现跨平台互操作性,整合Cisco Silicon One和NVIDIA Spectrum-X技术,支持企业在同一管理框架...
相关新闻
请登录后发表评论/回复/订阅/点赞
评论 (0)