Expressões aritméticas
Os operadores aritméticos são adição (+
), subtração (-
), multiplicação (*
), divisão (/
), negação (-
) e exponenciação (^
). Eles podem ser aplicados a operadores do tipo Int
, BigInt
ou Double
. Além disso, para tipos integrais (Int
e BigInt
), está disponível um operador que computa o módulo (%
).
Para operadores binários, o tipo dos dois operadores precisa o mesmo, exceto para exponenciação. Um expoente de um valor do tipo BigInt
precisa ser do tipo Int
. O tipo da expressão inteira corresponde ao tipo do operando esquerdo. Para a exponenciação de Int
e BitInt
, o comportamento será indefinido se o expoente for negativo ou exigir mais de 32 bits para ser declarado (ou seja, se for superior a 2147483647).
Divisão e módulo para valores do tipo Int
e BigInt
seguem 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
sempre tem o mesmo sinal que a
, e b * (a / b) + a % b
é sempre igual a a
.
Em Q#, não há suporte para conversões automáticas entre tipos de dados aritméticos nem entre outros tipos de dados relacionados a isso. Isso é importante principalmente para o tipo de dados Result
e facilita a restrição de como as informações de runtime podem se propagar. O benefício disso é evitar erros acidentais, como os relacionados à perda de precisão.