c的%遇到负数就是取余,py的正负都是取模,取余是向0取整,取模是向无穷取正,10/-3=-3.33333取余就是-3取模就是-4,这样对吗
本问题来自阿里云开发者社区的【11大垂直技术领域开发者社群】。 https://developer.aliyun.com/article/706511 点击链接欢迎加入感兴趣的技术领域群。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
在C语言中,%
运算符确实用于取余操作。当与负数一起使用时,结果的符号通常与除数相同,但这实际上取决于实现(根据C标准,其行为对于负数除数是未定义的)。不过,大多数实现遵循的行为是:如果被除数是负数,结果将是负数;如果除数是负数,结果的符号可能会因编译器而异。
Python 中的 %
运算符则执行取模操作,这在数学上更准确地称为“模运算”。它不仅考虑了取余的结果,还确保了结果的符号与被模数(即除法中的被除数)相同。这意味着无论除数是正是负,结果总是非负的,并且小于除数的绝对值。
以您的例子来说: - C语言中,10 % -3
的结果可能因编译器而异,但常见的实现会给出 -1
(因为它是从 10 向下取到最接近 -3 的倍数的差),这里的确切行为依赖于具体实现。 - Python 中,10 % -3
的结果是 1
,这是因为取模运算会得到一个在 -3
到 0
范围内的结果,使得 10 - (-3) * 1 = 1
成立,保持了与被模数(10)相同的正号。
至于您提到的“取模是向无穷取正”,这个描述有些不准确。取模运算的结果是基于除法的,确保结果落在特定区间内,而不是简单地“向无穷大方向取正值”。在 Python 中,-10 % 3
的结果是 2
,这是因为当你从 -10
向上数到最近的 3
的倍数时,你会到达 -9
(即 -10 + 3 = -7
再加上 2 * 3
得到 -9
),这里的 2
是正的,但这是基于取模运算规则得出的,而非简单地“向正无穷”取值。
总结一下,C语言中的 %
行为可能因实现而异,尤其涉及到负数时。Python 的 %
操作符执行的是取模运算,保证结果的符号与被模数相同,并且在除数的绝对值范围内。