开发者社区 问答 正文

问大家一个问题,10/-3余数和商到底应该是什么

c的%遇到负数就是取余,py的正负都是取模,取余是向0取整,取模是向无穷取正,10/-3=-3.33333取余就是-3取模就是-4,这样对吗

本问题来自阿里云开发者社区的【11大垂直技术领域开发者社群】。 https://developer.aliyun.com/article/706511 点击链接欢迎加入感兴趣的技术领域群。

展开
收起
珍宝珠 2019-08-05 11:35:33 685 分享 版权
阿里云 AI 助理回答

在C语言中,%运算符确实用于取余操作。当与负数一起使用时,结果的符号通常与除数相同,但这实际上取决于实现(根据C标准,其行为对于负数除数是未定义的)。不过,大多数实现遵循的行为是:如果被除数是负数,结果将是负数;如果除数是负数,结果的符号可能会因编译器而异。

Python 中的 % 运算符则执行取模操作,这在数学上更准确地称为“模运算”。它不仅考虑了取余的结果,还确保了结果的符号与被模数(即除法中的被除数)相同。这意味着无论除数是正是负,结果总是非负的,并且小于除数的绝对值。

以您的例子来说: - C语言中,10 % -3 的结果可能因编译器而异,但常见的实现会给出 -1(因为它是从 10 向下取到最接近 -3 的倍数的差),这里的确切行为依赖于具体实现。 - Python 中,10 % -3 的结果是 1,这是因为取模运算会得到一个在 -30 范围内的结果,使得 10 - (-3) * 1 = 1 成立,保持了与被模数(10)相同的正号。

至于您提到的“取模是向无穷取正”,这个描述有些不准确。取模运算的结果是基于除法的,确保结果落在特定区间内,而不是简单地“向无穷大方向取正值”。在 Python 中,-10 % 3 的结果是 2,这是因为当你从 -10 向上数到最近的 3 的倍数时,你会到达 -9(即 -10 + 3 = -7 再加上 2 * 3 得到 -9),这里的 2 是正的,但这是基于取模运算规则得出的,而非简单地“向正无穷”取值。

总结一下,C语言中的 % 行为可能因实现而异,尤其涉及到负数时。Python 的 % 操作符执行的是取模运算,保证结果的符号与被模数相同,并且在除数的绝对值范围内。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答
问答分类:
问答地址: