2013-06-26 12 views
-3

Я смущен логикой 1% 2 будет 1. Потому что из того, что я знаю, 1/2 - , так что для этого нет остатка.Почему 1% 2 равно 1?

+0

Знаете ли вы, что возвращает оператор модуля? – squiguy

+1

3/2 - 1 остаток 1. 2/2 равно 1 остатка 0. 1/2 равно 0 остатка 1. 0/2 равно 0 остатка 0. – Patashu

+5

https://en.wikipedia.org/wiki/Modulus_operator – BrenBarn

ответ

1

2 * 0 0 , следовательно, остаток 1

если вопрос состоит в нахождении M% N

мы находим наименьшее или равно д, таких, что п * (некоторое целое число) = Q и д = < м мы затем найти (MQ), который является остатком ..

4

% возвращает остаток от a/b:

>>> 1 % 2 
1 
>>> 1/2 
0 
>>> 1 - 0 
1 

Кроме того, выражение по модулю может быть выражена как:

r = a - nq 

где д floor(a/n). Итак:

>>> import math 
>>> 1 - 2 * math.floor(1/2) 
1.0 
+0

Ahh yeah ~~ спасибо за терпение, объясняющее этот глупый вопрос ~ –

+1

@ErikaSawajiri Ха-ха, у всех нас есть тот момент: p – TerryA

4

1/2 равно 0 с остатком 1. Оператор% возвращает этот остаток.

+1

что делает ящерица на этом сайте – jamylak

+1

@jamylak Заставить нас всех чувствовать себя как noobs – TerryA

2

Конечно, есть остаток. Сколько 2-х вы можете выбраться из 1? 0 из них, с 1 слева.

1

Что оператор % делает:

a % b равно значение c таких как 0 <= c < b и существует ряд k так, что b * k + c = a.

3

% - оператор modulo. Он возвращает остаток после деления левой стороны на правую сторону. Так как 2 делит нулевые моменты на 1, остаток равен единице.

В общем случае, если a и b - целые положительные числа и < b, то a% b == a.

Аргументы не обязательно должны быть целыми. Более подробно можно получить в справочной документации Python (http://docs.python.org/2/reference/expressions.html):

Значение% (по модулю) оператор дает остаток от деления первого аргумента на второй. Числовые аргументы сначала преобразуются в общий тип. Аргумент zero right вызывает исключение 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 заменяется на пол (x/y) или пол (x/y) - 1 [3].

+0

* "В общем, если a и b - целые числа, a arshajii

+0

Хороший улов. Я исправил комментарий по общему случаю, чтобы ограничить его положительными целыми числами - учитывая простой пример вопроса, я хотел предоставить что-то подобное. – James

2

Ok, ответ был размещен как в 6 раз уже, просто добавив это для полноты картины, если есть один способ понять, по модулю (%), это преобразование от основания 10 к основанию 2, 1 не могут быть разделены на 2, поэтому мы оставляем его в покое (получите остаток от 1). Вы можете представить, что двоичные числа в третьем столбце являются результатами операции по модулю.

например. 9 (основание 10) - (основание 2).

2 | 9 | 1 
2 | 4 | 0 
2 | 2 | 0 
2 | 1 | 1 
Смежные вопросы