我对1% 2
将是 1 的逻辑感到困惑。因为据我所知,1/2是0,所以没有余数。
7 回答
%
返回 的余数a / b
:
>>> 1 % 2
1
>>> 1/2
0
>>> 1 - 0
1
此外,模表达式可以表示为:
r = a - nq
其中 q 是floor(a/n)
。所以:
>>> import math
>>> 1 - 2 * math.floor(1/2)
1.0
1/2 为 0,余数为 1。% 运算符返回该余数。
% 是模运算符。它返回左手边除以右手边后的余数。由于 2 将 0 除为 1,因此余数为 1。
一般来说,如果a和b都是正整数,并且a < b,那么a % b == a。
不过,参数不必是整数。更多详细信息可从 python 参考文档 ( http://docs.python.org/2/reference/expressions.html ) 中获得:
%(取模)运算符产生第一个参数除以第二个参数的余数。数字参数首先转换为通用类型。零右参数引发 ZeroDivisionError 异常。参数可以是浮点数,例如,3.14%0.7 等于 0.34(因为 3.14 等于 4*0.7 + 0.34。)模运算符总是产生与第二个操作数(或零)具有相同符号的结果。结果的绝对值严格小于第二个操作数的绝对值 [2]。
整数除法和取模运算符通过以下恒等式连接:x == (x/y)*y + (x%y)。整数除法和取模也与内置函数 divmod() 相连:divmod(x, y) == (x/y, x%y)。这些恒等式不适用于浮点数;在 x/y 被 floor(x/y) 或 floor(x/y) - 1 [3] 替换的情况下,类似的恒等式近似成立。
当然还有余数。你能从 1 中得到多少个 2?其中 0 个,剩余 1 个。
Ok, the answer has been posted like 6 times already, just adding this for completeness, If there's one way to understand modulo (%
), it's converting from base 10 to base 2, 1 can't be divided by 2 so we leave it alone (get a remainder of 1). You can imagine the binary numbers in the third column to be the results of a modulo operation.
eg. 9 (base 10) to (base 2)..
2 | 9 | 1
2 | 4 | 0
2 | 2 | 0
2 | 1 | 1
2*0 为 0,因此余数为 1
如果问题是找到 m%n
我们找到最小或等于 q 使得 n*(一些整数) = q 并且 q<=m 我们然后找到 (mq) 这是余数..
运营商在做什么%
:
a % b
等于一个值c
,例如0 <= c < b
并且存在一个数字k
,使得b * k + c = a
.