Expressões aritméticas
Os operadores aritméticos são adição (+
), subtração (-
), multiplicação (*
), divisão (/
), negação (-
) e exponenciação (^
). Podem ser aplicados a operandos do tipo Int
, BigInt
ou Double
. Além disso, para tipos integrais (Int
e BigInt
), está disponível um operador que computa o modulus (%
).
Para os operadores binários, o tipo de ambos os operandos tem de corresponder, exceto para a exponenciação; um expoente para um valor de tipo BigInt
tem de ser do tipo Int
. O tipo de expressão inteira corresponde ao tipo de operando esquerdo. Para a exponenciação de Int
e BitInt
, o comportamento é indefinido se o expoente for negativo ou precisar de mais de 32 bits para representar (ou seja, se for maior do que 2147483647).
Divisão e modulus para valores do tipo Int
e BigInt
siga o seguinte comportamento para 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 |
Ou seja, a % b
tem sempre o mesmo sinal de a
e b * (a / b) + a % b
é sempre igual a
a .
Q# não suporta conversões automáticas entre tipos de dados aritméticos ou outros tipos de dados. Isto é importante especialmente para o Result
tipo de dados e facilita a restrição da forma como as informações de runtime podem ser propagadas. Tem o benefício de evitar erros acidentais, como os relacionados com a perda de precisão.