Compartilhar via


Operadores aritméticos (F#)

Este tópico descreve os operadores aritméticos, estão disponíveis no idioma F#.

Resumo dos operadores aritméticos binários

A tabela a seguir resume os operadores aritméticos binários que estão disponíveis para os tipos de integrais e de ponto flutuante de desemoldurado.

Operador binário

Anotações

+(adição, plus)

Unchecked (Desmarcada). Possível condição de estouro quando os números são adicionados juntos e a soma excede o máximo valor absoluto suportado pelo tipo.

-(subtração, sinal de subtração)

Unchecked (Desmarcada). Estouro negativo de possível condição quando os tipos de não assinados são subtraídos, ou quando os valores de ponto flutuante são muito pequenos para ser representado pelo tipo.

*(multiplicação, vezes)

Unchecked (Desmarcada). Possível condição de estouro quando os números são multiplicados e o produto excede o máximo valor absoluto suportado pelo tipo.

/(divisão), dividido pelo

Divisão por zero faz com que uma DivideByZeroException para tipos integrais. Para tipos de ponto flutuante, divisão por zero dá os valores de ponto flutuante especiais +Infinity ou -Infinity. Há também uma condição de estouro de negativo possível quando um número de ponto flutuante é muito pequeno para ser representado pelo tipo.

%(módulo, mod)

Retorna o resto de uma operação de divisão. O sinal de que o resultado é o mesmo que o sinal do primeiro operando.

**(exponenciação, à potência de)

Possível condição de estouro quando o resultado excede o máximo valor absoluto para o tipo.

O operador de exponenciação só funciona com tipos de ponto flutuante.

Resumo dos operadores de aritmética de unário

A tabela a seguir resume os operadores aritméticos unário que estão disponíveis para tipos integrais e de ponto flutuante.

Operador unário

Anotações

+(positivo)

Pode ser aplicado a qualquer expressão aritmética. Não altera o sinal do valor.

-(negação, negativa)

Pode ser aplicado a qualquer expressão aritmética. Altera o sinal do valor.

O comportamento no estouro positivo ou para tipos integrais é disposto ao redor. Isso faz com que um resultado incorreto. Estouro de inteiro é um problema potencialmente grave que pode contribuir para problemas de segurança, quando o software não é gravado para ele. Se esta for uma preocupação para seu aplicativo, considere o uso de operadores de verificação no Microsoft.FSharp.Core.Operators.Checked.

Resumo dos operadores de comparação binários

A tabela a seguir mostra os operadores de comparação binária estão disponíveis para tipos integrais e de ponto flutuante. Esses operadores retornam valores do tipo bool.

Números de ponto flutuante nunca devem ser comparados diretamente de igualdade, porque a representação de ponto flutuante IEEE não oferece suporte a uma operação de igualdade exata. Dois números, você pode facilmente verificar para ser igual inspecionando o código realmente podem ter representações de diferente de bits.

Operador

Anotações

=(igual a igualdade)

Isso não é um operador de atribuição. Ele é usado apenas para comparação. Este é um operador genérico.

>(maior que)

Este é um operador genérico.

<(menor que)

Este é um operador genérico.

>=(maior que ou igual a)

Este é um operador genérico.

<=(menor que ou igual a)

Este é um operador genérico.

<>(não igual)

Este é um operador genérico.

Operadores sobrecarregados e genéricos

Todos os operadores discutidos neste tópico são definidos no Microsoft.FSharp.Core.Operators namespace. Alguns dos operadores são definidos usando os parâmetros de tipo estaticamente resolvido. Isso significa que há definições individuais para cada tipo específico que funciona com esse operador. Todos os operadores aritméticos e bit a bit de binários e unários estão nesta categoria. Os operadores de comparação são genéricos e portanto funcionam com qualquer tipo, não apenas aritméticos primitivos. União discriminada e tipos de registro têm suas próprias implementações personalizadas que são geradas pelo compilador F#. Tipos de classe usam o método Equals.

Os operadores genéricos são personalizáveis. Para personalizar as funções de comparação, substituir Equals para fornecer sua própria comparação de igualdade personalizado e, em seguida, implementar IComparable. O IComparable interface possui um método único, o CompareTo método.

Inferência de tipos e operadores

O uso de um operador em uma expressão restringe a inferência de tipo esse operador. Além disso, o uso de operadores impede a generalização automática, pois o uso de operadores implica um tipo de aritmético. Na ausência de qualquer outra informação, infere o compilador F# int como o tipo de expressões aritméticas. Você pode substituir esse comportamento, especificando um outro tipo. Assim, os tipos de argumento e o tipo de retorno de function1 no código a seguir são inferidos sejam int, mas os tipos de function2 são inferidos sejam float.

// x, y and return value inferred to be int
// function1: int -> int -> int
let function1 x y = x + y

// x, y and return value inferred to be float
// function2: float -> float -> float
let function2 (x: float) y = x + y

Consulte também

Referência

Símbolo e o referência de operador (F#)

Operador de sobrecarga (F#)

Operadores bit a bit (F#)

Operadores booleanos (F#)