Expresiones aritméticas
Los operadores aritméticos son: suma (+
), resta (-
), multiplicación (*
), división (/
), negación (-
) y exponenciación (^
). Se pueden aplicar a operandos de tipo Int
, BigInt
o Double
. Además, para los tipos enteros (Int
y BigInt
) hay disponible un operador que calcula el módulo (%
).
Para los operadores binarios, el tipo de ambos operandos debe coincidir, excepto para la exponenciación; un exponente para un valor de tipo BigInt
siempre debe ser de tipo Int
. El tipo de toda la expresión coincide con el tipo del operando izquierdo. Para la exponenciación de Int
y BitInt
, el comportamiento es indefinido si el exponente es negativo o si requiere más de 32 bits para representarlo (es decir, es mayor que 2147483647).
La división y el módulo para valores de tipo Int
y BigInt
siguen el comportamiento siguiente para los números negativos:
A |
B |
A / B |
A % B |
---|---|---|---|
5 | 2 | 2 | 1 |
5 | -2 | -2 | 1 |
-5 | 2 | -2 | -1 |
-5 | -2 | 2 | -1 |
Es decir, a % b
siempre tiene el mismo signo que a
y b * (a / b) + a % b
siempre es igual a a
.
Q# no admite conversiones automáticas entre tipos de datos aritméticos, ni ningún otro tipo de datos en ese caso. Esto es importante especialmente para el tipo de datos Result
y facilita la restricción de la propagación de la información en tiempo de ejecución. Tiene la ventaja de evitar errores accidentales, por ejemplo, los relacionados con la pérdida de precisión.