%
- оператор остатка в C и C ++.
В Стандарте C ++ он называется оператором %
и возвращает остаток от деления . В стандарте C он называется оператором %
, а с C99 он фактически является оператором остатка. Операторы по модулю и остатку отличаются по отрицательным значениям.
Оператор %
определен в C и C ++ с помощью a == (a / b * b) + a % b
.
Усечение целочисленного деления до 0 в C выполняется с C99. В C89 это было определено реализацией (и %
может быть оператором по модулю в C89). C ++ также выполняет усечение до нуля для целочисленного деления.
Когда усечение выполняется до нуля, %
является оператором остатка, а знак результата является знаком дивиденда. Когда усечение выполняется до минус бесконечности, %
является оператором по модулю, а знак результата является знаком делителя.
По причинам, по которым C изменил поведение, определяемое реализацией целочисленного деления в отношении усечения, Дуг Гвин из комитета C сказал:
C99 наложил совместимое с Фортраном требование в попытке привлечь больше фортрановских программистов и помочь в преобразовании кода Фортрана в C.
C99 Обоснование говорит об усечении до нулевого целочисленного деления:
В Фортране, однако, результат всегда будет обрезаться до нуля, и накладные расходы кажутся приемлемыми для сообщества числового программирования. Поэтому C99 теперь требует аналогичного поведения, что должно облегчить перенос кода с Fortran на C.
В gcc
поведение реализации в C89 всегда было усечением до нуля.
Итак, %
является оператором остатка в C99, C ++, а также в Java, но не является оператором остатка во всех языках программирования. В Ruby и Python %
фактически является оператором по модулю (целочисленное деление выполняется в направлении минус бесконечность в этих языках). Haskhell и Scheme имеют два отдельных оператора: mod
и rem
для Haskell и modulo
и remainder
для Scheme.