Меню Закрыть

Как получить остаток от деления в c

Содержание

Доброго времени суток! Тема математических операций является неотъемлемой частью любого языка программирования. А поскольку мы уже успели познакомится с переменными в C++, то самое время поподробнее узнать об использовании математических операторах.

Содержание статьи:

Теперь давайте по порядку рассмотрим каждый математический оператор.

Сложение

Сложение в C++ реализовано абсолютно также как и в математике. Собственно, если мы хотим сложить два числа или переменные, то мы должны между ними поставить знак плюс (+):

Операцию сложения можно выполнять практически со всеми типами в С++.

Вычитание

Для вычитания в C++ используется тот же принцип, что и для сложения. Мы просто указываем два числа или переменные, а между ними знак минус (-):

Операцию вычитания, также как и сложения, можно использовать почти всеми типами в C++.

Также у оператора вычитания есть еще одна возможность: если мы перед переменной или числом поставим минус, то данное число или переменная поменяет свой знак на противоположный (минус на плюс, а с плюса на минус):

Тоже самое можно сделать и с плюсом, но он совершенно ничего не меняет (проверьте сами).

Умножение

Если мы хотим умножить переменные или числа, то мы должны между ними поставить знак звездочки (*). Он имеет больший приоритет, нежели сложение или вычитание (только если это не унарный оператор минус, который указывается перед числом):

Как видите вначале выполняется умножение, а только потом сложение (или вычитание). Также, как и в математике, мы можем группировать несколько действий с помощью скобок:

Скобки можно применять с любыми операторами в C++.

Деление

Если вы хотите разделить число, то вам нужно воспользоваться слешем (/). Вот пример его использования:

Приоритет у операции деления такой же, как и у умножения.

Но будьте осторожны при делении числа целого типа. Если оно не будет делится нацело, то C++ возьмет только целую часть и полностью отбросит дробную. Если вы хотите сохранить точность, то пользуйтесь типом float или double :

Как видите, теперь дробная часть никуда не денется от нас 🙂 .

Остаток от деления

Если же вы хотите узнать, делится ли число нацело на другое, то вам нужно узнать остаток от деления. В C++ для выполнения этой операции используется знак процента (%). Если остаток от деления будет равен нулю, то число A нацело делится на число B:

Оператор остатка от деления имеет такой же приоритет, как и операции умножения и деления.

Вот мы и рассмотрели математические операции в C++. Поскольку мы полностью рассмотрели данную тему, я вам рекомендую пройти небольшой тест. Тем самым вы сможете протестировать свои знания.

Арифметические операторы, представленные в C#, приведены ниже:

Арифметические операторы C#

Оператор Действие
+ Сложение
Вычитание, унарный минус
* Умножение
/ Деление
% Деление по модулю
Декремент
++ Инкремент

Операторы +,-,* и / действуют так, как предполагает их обозначение. Их можно применять к любому встроенному числовому типу данных.

Действие арифметических операторов не требует особых пояснений, за исключением следующих особых случаев. Прежде всего, не следует забывать, что когда оператор / применяется к целому числу, то любой остаток от деления отбрасывается; например, результат целочисленного деления 13/3 будет равен 4. Остаток от этого деления можно получить с помощью оператора деления по модулю (%), который иначе называется оператором вычисления остатка. Он дает остаток от целочисленного деления. Например, 13 % 3 равно 1. В C# оператор % можно применять как к целочисленным типам данных, так и к типам с плавающей точкой. Поэтому 13.0 % 3.0 также равно 1. В этом отношении C# отличается от языков С и С++, где операции деления по модулю разрешаются только для целочисленных типов данных. Давайте рассмотрим следующий пример:

Результат работы данной программы:

Операторы инкремента и декремента

Оператор инкремента (++) увеличивает свой операнд на 1, а оператор декремента (—) уменьшает операнд на 1. Следовательно, операторы:

Следует, однако, иметь в виду, что в инкрементной или декрементной форме значение переменной x вычисляется только один, а не два раза. В некоторых случаях это позволяет повысить эффективность выполнения программы.

Обa оператора инкремента и декремента можно указывать до операнда (в префиксной форме) или же после операнда (в постфиксной форме). Давайте разберем разницу записи операции инкремента или декремента на примере:

Т.е. операция инкремента в префиксной форме происходит раньше, нежели в постфиксной форме, в результате чего числа из второго ряда получаются на единицу больше. Отмечу, что возможность управлять моментом инкремента или декремента дает немало преимуществ при программировании.

Следующие операторы выполняют арифметические операции с числовыми типами: The following operators perform arithmetic operations with numeric types:

Эти операторы поддерживают все целочисленные типы и типы с плавающей запятой. Those operators support all integral and floating-point numeric types.

Оператор инкремента ++ Increment operator ++

Оператор инкремента ++ увеличивает операнд на 1. The unary increment operator ++ increments its operand by 1. Операндом должна быть переменная, свойство или индексатор. The operand must be a variable, a property access, or an indexer access.

Читайте также:  Игра пятница 13 системные требования на пк

Оператор инкремента поддерживается в двух формах: постфиксный оператор инкремента ( x++ ) и префиксный оператор инкремента ( ++x ). The increment operator is supported in two forms: the postfix increment operator, x++ , and the prefix increment operator, ++x .

Постфиксный оператор приращения Postfix increment operator

Результатом x++ является значение x перед выполнением операции, как показано в следующем примере: The result of x++ is the value of x before the operation, as the following example shows:

Префиксный оператор инкремента Prefix increment operator

Результатом ++x является значение x после выполнения операции, как показано в следующем примере: The result of ++x is the value of x after the operation, as the following example shows:

Оператор декремента — Decrement operator —

Унарный оператор декремента — уменьшает операнд на 1. The unary decrement operator — decrements its operand by 1. Операндом должна быть переменная, свойство или индексатор. The operand must be a variable, a property access, or an indexer access.

Оператор декремента поддерживается в двух формах: постфиксный оператор декремента ( x— ) и префиксный оператор декремента ( —x ). The decrement operator is supported in two forms: the postfix decrement operator, x— , and the prefix decrement operator, —x .

Постфиксный оператор уменьшения Postfix decrement operator

Результатом x— является значение x перед выполнением операции, как показано в следующем примере: The result of x— is the value of x before the operation, as the following example shows:

Префиксный оператор декремента Prefix decrement operator

Результатом —x является значение x после выполнения операции, как показано в следующем примере: The result of —x is the value of x after the operation, as the following example shows:

Операторы унарного плюса и минуса Unary plus and minus operators

Унарный оператор + возвращает значение полученного операнда. The unary + operator returns the value of its operand. Унарный оператор — изменяет знак операнда на противоположный. The unary — operator computes the numeric negation of its operand.

Унарный оператор — не поддерживает тип ulong. The unary — operator doesn’t support the ulong type.

Оператор умножения * Multiplication operator *

Оператор умножения * вычисляет произведение операндов: The multiplication operator * computes the product of its operands:

Унарный оператор * представляет собой оператор косвенного обращения к указателю. The unary * operator is the pointer indirection operator.

Оператор деления / Division operator /

Оператор деления / делит левый операнд на правый. The division operator / divides its left-hand operand by its right-hand operand.

Деление целых чисел Integer division

Для операндов цельночисленных типов результат оператора / является целочисленным типом, который равен частному двух операндов, округленному в сторону нуля: For the operands of integer types, the result of the / operator is of an integer type and equals the quotient of the two operands rounded towards zero:

Чтобы получить частное двух операндов в виде числа с плавающей запятой, используйте тип float , double или decimal : To obtain the quotient of the two operands as a floating-point number, use the float , double , or decimal type:

Деление чисел с плавающей запятой Floating-point division

Для типов float , double и decimal результатом оператора / является частное двух операндов: For the float , double , and decimal types, the result of the / operator is the quotient of the two operands:

Если один из операндов — это decimal , второй операнд не может быть ни float , ни double , так как ни float , ни double не преобразуется неявно в тип decimal . If one of the operands is decimal , another operand can be neither float nor double , because neither float nor double is implicitly convertible to decimal . Необходимо явным образом преобразовать операнд float или double в тип decimal . You must explicitly convert the float or double operand to the decimal type. Дополнительные сведения о числовых преобразованиях см. в разделе Встроенные числовые преобразования. For more information about conversions between numeric types, see Built-in numeric conversions.

Оператор остатка % Remainder operator %

Оператор остатка % вычисляет остаток от деления левого операнда на правый. The remainder operator % computes the remainder after dividing its left-hand operand by its right-hand operand.

Целочисленный остаток Integer remainder

Для целочисленных операндов результатом a % b является значение, произведенное a — (a / b) * b . For the operands of integer types, the result of a % b is the value produced by a — (a / b) * b . Знак ненулевого остатка такой же, как и у левого операнда, как показано в следующем примере: The sign of the non-zero remainder is the same as that of the left-hand operand, as the following example shows:

Используйте метод Math.DivRem для вычисления результатов как целочисленного деления, так и определения остатка. Use the Math.DivRem method to compute both integer division and remainder results.

Читайте также:  Почему не запускается forza horizon 4

Остаток с плавающей запятой Floating-point remainder

Для операндов типа float и double результатом x % y для конечных x и y будет значение z , так что: For the float and double operands, the result of x % y for the finite x and y is the value z such that

  • знак z , если отлично от нуля, совпадает со знаком x ; The sign of z , if non-zero, is the same as the sign of x .
  • абсолютное значение z является значением, произведенным |x| — n * |y| , где n — это наибольшее возможное целое число, которое меньше или равно |x| / |y| , а |x| и |y| являются абсолютными значениями x и y , соответственно. The absolute value of z is the value produced by |x| — n * |y| where n is the largest possible integer that is less than or equal to |x| / |y| and |x| and |y| are the absolute values of x and y , respectively.

Этот метод вычисления остатка аналогичен тому, который использовался для целочисленных операндов, но отличается от IEEE 754. This method of computing the remainder is analogous to that used for integer operands, but differs from the IEEE 754. Если вам нужна операция остатка, которая соответствует IEEE 754, используйте метод Math.IEEERemainder. If you need the remainder operation that complies with the IEEE 754, use the Math.IEEERemainder method.

Сведения о поведение оператора % в случае неконечных операндов см. в разделе Оператор остатка спецификации языка C#. For information about the behavior of the % operator with non-finite operands, see the Remainder operator section of the C# language specification.

Для операндов decimal оператор остатка % эквивалентен оператору остатка типа System.Decimal. For the decimal operands, the remainder operator % is equivalent to the remainder operator of the System.Decimal type.

В следующем примере показано поведение оператора остатка для операндов с плавающей запятой: The following example demonstrates the behavior of the remainder operator with floating-point operands:

Оператор сложения + Addition operator +

Оператор сложения + вычисляет сумму своих операндов: The addition operator + computes the sum of its operands:

Кроме того, оператор + можно использовать для объединения строк и делегатов. You also can use the + operator for string concatenation and delegate combination. Дополнительные сведения см. в статье Операторы + и += . For more information, see the + and += operators article.

Оператор вычитания — Subtraction operator —

Оператор вычитания — вычитает правый операнд из левого: The subtraction operator — subtracts its right-hand operand from its left-hand operand:

Кроме того, оператор — можно использовать для удаления делегатов. You also can use the — operator for delegate removal. Дополнительные сведения см. в статье Оператор — . For more information, see the — operator article.

Составное присваивание Compound assignment

Для бинарного оператора op выражение составного присваивания в форме For a binary operator op , a compound assignment expression of the form

эквивалентно is equivalent to

за исключением того, что x вычисляется только один раз. except that x is only evaluated once.

Следующий пример иллюстрирует использование составного присваивания с арифметическими операторами: The following example demonstrates the usage of compound assignment with arithmetic operators:

Из-за восходящих приведений результат операции op может быть невозможно неявно преобразовать в тип T из x . Because of numeric promotions, the result of the op operation might be not implicitly convertible to the type T of x . В этом случае, если op является предопределенным оператором, и результат операции является явно преобразуемым в тип T x , выражение составного присваивания формы x op= y эквивалентно x = (T)(x op y) , за исключением того, что x вычисляется только один раз. In such a case, if op is a predefined operator and the result of the operation is explicitly convertible to the type T of x , a compound assignment expression of the form x op= y is equivalent to x = (T)(x op y) , except that x is only evaluated once. В следующем примере продемонстрировано такое поведение. The following example demonstrates that behavior:

Вы также можете использовать операторы += и -= для подписки и отмены подписки на события. You also use the += and -= operators to subscribe to and unsubscribe from events. Дополнительные сведения см. в разделе Практическое руководство. Подписка и отмена подписки на события. For more information, see How to: subscribe to and unsubscribe from events.

Приоритет и ассоциативность операторов Operator precedence and associativity

В следующем списке перечислены арифметические операторы в порядке убывания приоритета: The following list orders arithmetic operators starting from the highest precedence to the lowest:

  • Постфиксный инкремент x++ и декремент x— Postfix increment x++ and decrement x— operators
  • Префиксный инкремент ++x и декремент —x , унарные операторы + и — Prefix increment ++x and decrement —x and unary + and — operators
  • Мультипликативные операторы * , / , и % Multiplicative * , / , and % operators
  • Аддитивные операторы + и — Additive + and — operators
Читайте также:  Electronic anti theft faulty

Бинарные арифметические операторы имеют левую ассоциативность. Binary arithmetic operators are left-associative. То есть операторы с одинаковым приоритетом вычисляются в направлении слева направо. That is, operators with the same precedence level are evaluated from left to right.

Порядок вычисления, определяемый приоритетом и ассоциативностью операторов, можно изменить с помощью скобок ( () ). Use parentheses, () , to change the order of evaluation imposed by operator precedence and associativity.

Полный список операторов C#, упорядоченных по уровню приоритета, см. в статье Операторы C#. For the complete list of C# operators ordered by precedence level, see C# operators.

Арифметическое переполнение и деление на нуль Arithmetic overflow and division by zero

Если результат арифметической операции выходит за пределы диапазона возможных конечных значений соответствующего числового типа, поведение арифметического оператора зависит от типа его операндов. When the result of an arithmetic operation is outside the range of possible finite values of the involved numeric type, the behavior of an arithmetic operator depends on the type of its operands.

Целочисленное арифметическое переполнение Integer arithmetic overflow

Деление целого числа на ноль всегда вызывает исключение DivideByZeroException. Integer division by zero always throws a DivideByZeroException.

В случае целочисленного арифметического переполнения итоговое поведение определяется контекстом проверки переполнения, который может быть проверяемым или непроверяемым: In case of integer arithmetic overflow, an overflow checking context, which can be checked or unchecked, controls the resulting behavior:

  • Если в проверяемом контексте переполнение возникает в константном выражении, происходит ошибка времени компиляции. In a checked context, if overflow happens in a constant expression, a compile-time error occurs. В противном случае, если операция производится во время выполнения, возникает исключение OverflowException. Otherwise, when the operation is performed at run time, an OverflowException is thrown.
  • В непроверяемом контексте результат усекается путем удаления старших разрядов, которые не помещаются в целевой тип данных. In an unchecked context, the result is truncated by discarding any high-order bits that don’t fit in the destination type.

Вместе с проверяемыми и непроверяемыми операторами вы можете использовать операторы checked и unchecked , чтобы управлять контекстом проверки переполнения, в котором вычисляется выражение: Along with the checked and unchecked statements, you can use the checked and unchecked operators to control the overflow checking context, in which an expression is evaluated:

По умолчанию арифметические операции выполняются в непроверяемом контексте. By default, arithmetic operations occur in an unchecked context.

Арифметическое переполнение с плавающей запятой Floating-point arithmetic overflow

Арифметические операции с типами float и double никогда не вызывают исключение. Arithmetic operations with the float and double types never throw an exception. Результатом арифметических операций с этими типами может быть одно из специальных значений, представляющих бесконечность и объект, не являющийся числовым: The result of arithmetic operations with those types can be one of special values that represent infinity and not-a-number:

Для операндов типа decimal арифметическое переполнение всегда вызывает исключение OverflowException, а деление на нуль всегда вызывает исключение DivideByZeroException. For the operands of the decimal type, arithmetic overflow always throws an OverflowException and division by zero always throws a DivideByZeroException.

Ошибки округления Round-off errors

Из-за общих ограничений, касающихся представления вещественных чисел в форме с плавающей запятой и арифметических операций с плавающей запятой, при вычислениях с использованием типов с плавающей запятой могут возникать ошибки округления. Because of general limitations of the floating-point representation of real numbers and floating-point arithmetic, the round-off errors might occur in calculations with floating-point types. То есть полученный результат выражения может отличаться от ожидаемого математического результата. That is, the produced result of an expression might differ from the expected mathematical result. В следующем примере показано несколько таких случаев: The following example demonstrates several such cases:

Дополнительные сведения см. в заметках на страницах справочника System.Double, System.Single или System.Decimal. For more information, see remarks at System.Double, System.Single, or System.Decimal reference pages.

Возможность перегрузки оператора Operator overloadability

Определяемый пользователем тип может перегружать унарные ( ++ , — , + и — ) и бинарные ( * , / , % , + и — ) арифметические операторы. A user-defined type can overload the unary ( ++ , — , + , and — ) and binary ( * , / , % , + , and — ) arithmetic operators. При перегрузке бинарного оператора соответствующий оператор составного присваивания также неявно перегружается. When a binary operator is overloaded, the corresponding compound assignment operator is also implicitly overloaded. Определяемый пользователем тип не может перегружать оператор составного присваивания явным образом. A user-defined type cannot explicitly overload a compound assignment operator.

Спецификация языка C# C# language specification

Дополнительные сведения см. в следующих разделах статьи Спецификация языка C#: For more information, see the following sections of the C# language specification:

Рекомендуем к прочтению

Добавить комментарий

Ваш адрес email не будет опубликован.