Compartir a través de


Operadores aritméticos (F#)

En este tema se describen los operadores aritméticos que están disponibles en el lenguaje F#.

Resumen de los operadores aritméticos binarios

En la tabla siguiente se resumen los operadores aritméticos binarios que están disponibles para tipos de punto flotante y enteros con conversión unboxing.

Operador binario

Notas

+ (suma, más)

Desactivado. Puede producirse un desbordamiento al sumar números si la suma supera el máximo valor absoluto admitido por el tipo.

- (resta, menos)

Desactivado. Puede producirse un subdesbordamiento al restar tipos sin signo o cuando los valores de punto flotante son demasiado pequeños para ser representados por el tipo.

* (multiplicación, por)

Desactivado. Puede producirse desbordamiento al multiplicar números si el producto supera el máximo valor absoluto admitido por el tipo.

/ (división, dividido entre)

La división entre cero produce una excepción DivideByZeroException para tipos enteros. En el caso de los tipos de punto flotante, la división entre cero proporciona los valores de punto flotante especiales +Infinity o -Infinity. También puede producirse subdesbordamiento cuando un número de punto flotante es demasiado pequeño para ser representado por el tipo.

% (módulo, mod)

Devuelve el resto de una operación de división. El signo del resultado es igual que el signo del primer operando.

** (exponenciación, elevado a)

Puede producirse desbordamiento cuando el resultado supera el máximo valor absoluto del tipo.

El operador de exponenciación solo funciona con los tipos de punto flotante.

Resumen de los operadores aritméticos unarios

En la tabla siguiente se resumen los operadores aritméticos unarios que están disponibles para tipos de punto flotante y enteros.

Operador unario

Notas

+ (positivo)

Puede aplicarse a cualquier expresión aritmética. No cambia el signo del valor.

- (negación, negativo)

Puede aplicarse a cualquier expresión aritmética. Cambia el signo del valor.

En caso de desbordamiento o subdesbordamiento de tipos enteros, se vuelve al principio. Esto da lugar a un resultado incorrecto. El desbordamiento de enteros puede llegar a ser un problema grave, que podría acarrear problemas de seguridad si no se tiene en cuenta al programar el software. Si su aplicación se ve afectada, considere la posibilidad de usar los operadores Microsoft.FSharp.Core.Operators.Checked.

Resumen de los operadores de comparación binarios

En la tabla siguiente se muestran los operadores de comparación binarios que están disponibles para tipos enteros y de punto flotante. Estos operadores devuelven valores de tipo bool.

Los números de punto flotante no deben compararse nunca directamente para determinar si son iguales, ya que la representación de punto flotante IEEE no permite una operación de igualdad exacta. Dos números cuya igualdad se puede comprobar fácilmente inspeccionando el código podrían tener en realidad diferentes representaciones de bits.

Operador

Notas

= (igualdad, igual a)

No es un operador de asignación. Se utiliza únicamente para la comparación. Es un operador genérico.

> (mayor que)

Es un operador genérico.

< (menor que)

Es un operador genérico.

>= (mayor o igual que)

Es un operador genérico.

<= (menor o igual que)

Es un operador genérico.

<> (no es igual a)

Es un operador genérico.

Operadores sobrecargados y genéricos

Todos los operadores que se abordan en este tema están definidos en el espacio de nombres Microsoft.FSharp.Core.Operators. Algunos de los operadores se definen mediante parámetros de tipo resueltos en tiempo de compilación. Esto significa que hay definiciones individuales para cada tipo específico que funciona con ese operador. Todos los operadores bit a bit y operadores aritméticos unarios y binarios forman parte de esta categoría. Los operadores de comparación son genéricos, por lo que funcionan con cualquier tipo y no solo con los tipos aritméticos primitivos. Los tipos de unión discriminada y de registro tienen sus propias implementaciones personalizadas que genera el compilador de F#. Los tipos de clase usan el método Equals.

Los operadores genéricos son personalizables. Para personalizar las funciones de comparación, reemplace Equals para proporcionar una comparación de igualdad personalizada y, a continuación, implemente IComparable. La interfaz IComparable tiene un solo método: CompareTo.

Operadores e inferencia de tipos

El uso de un operador en una expresión restringe la inferencia de tipos en ese operador. Asimismo, el uso de operadores impide la generalización automática, ya que implica un tipo aritmético. A falta de cualquier otra información, el compilador de F# infiere int como el tipo de una expresión aritmética. Se puede reemplazar este comportamiento especificando otro tipo. Por consiguiente, en el siguiente código, se deduce que los tipos de los argumentos y el tipo de valor devuelto por function1 son int; en cambio, para function2 los tipos inferidos son 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

Vea también

Referencia

Referencia de símbolos y operadores (F#)

Sobrecarga de operadores (F#)

Operadores bit a bit (F#)

Operadores booleanos (F#)