Operadores multiplicativos e o operador de módulo
Sintaxe
expression * expression
expression / expression
expression % expression
Comentários
Os operadores de multiplicação são:
Multiplicação (
*
)Divisão (
/
)Módulo (resto da divisão) (
%
)
Esses operadores binários possuem associatividade da esquerda para a direita.
Os operadores de multiplicação usam operandos de tipos aritméticos. O operador de módulo (%) tem um requisito mais restrito, já que seus operandos devem ser do tipo integral. (Para obter o restante de uma divisão de ponto flutuante, use a função em tempo de execução, fmod.) As conversões abordadas em Conversões padrão são aplicadas aos operandos e o resultado é do tipo convertido.
O operador de multiplicação gera o resultado da multiplicação do primeiro operando pelo segundo.
O operador de divisão gera o resultado da divisão do primeiro operando pelo segundo.
O operador de módulo gera o resto fornecido pela expressão a seguir, em que e1 é o primeiro operando e e2 é o segundo: e1 - (e1 / e2) * e2, onde ambos os operandos são de tipos integrais.
A divisão por 0 em uma divisão ou em uma expressão de módulo é indefinida e gera um erro de tempo de execução. Desse modo, as expressões a seguir geram resultados indefinidos e errôneos:
i % 0
f / 0.0
Se ambos os operandos em uma expressão de multiplicação, divisão ou módulo tiverem o mesmo sinal, o resultado será positivo. Caso contrário, o resultado será negativo. O resultado do sinal de uma operação de módulo é definido pela implementação.
Observação
Uma vez que as conversões executadas pelos operadores de multiplicação não fornecem condições de estouro ou estouro negativo, as informações poderão ser perdidas se o resultado de uma operação de multiplicação não puder ser representado no tipo dos operandos após a conversão.
Seção específica da Microsoft
No Microsoft C++, o resultado de uma expressão de módulo sempre é igual ao sinal do primeiro operando.
Fim da seção específica da Microsoft
Se a divisão calculada de dois inteiros for inexata e apenas um operando for negativo, o resultado será o interior maior (em magnitude, independentemente do sinal), que é menor que o valor exato que seria gerado pela operação de divisão. Por exemplo, o valor computado de -11 / 3 é -3,666666666. O resultado dessa divisão integral é -3.
A relação entre os operadores de multiplicação é fornecida pela identidade (e1 / e2) * e2 + e1 % e2 == e1.
Exemplo
O programa a seguir demonstra os operadores de multiplicação. Observe que qualquer que seja o operando de 10 / 3
, ele deve ser explicitamente convertido no tipo float
para evitar truncamento, de modo que ambos os operandos sejam do tipo float
antes da divisão.
// expre_Multiplicative_Operators.cpp
// compile with: /EHsc
#include <iostream>
using namespace std;
int main() {
int x = 3, y = 6, z = 10;
cout << "3 * 6 is " << x * y << endl
<< "6 / 3 is " << y / x << endl
<< "10 % 3 is " << z % x << endl
<< "10 / 3 is " << (float) z / x << endl;
}
Confira também
Expressões com operadores binários
Operadores internos C++, precedência e associatividade
Operadores multiplicativos C