Espressioni aritmetiche
Gli operatori aritmetici sono addizione (+
), sottrazione (-
), moltiplicazione (*
), divisione (/
), negazione (-
) ed esponente (^
). Possono essere applicati agli operandi di tipo Int
, BigInt
o Double
. Inoltre, per i tipi integrali (Int
e BigInt
), è disponibile un operatore che calcola il modulo (%
).
Per gli operatori binari, il tipo di entrambi gli operandi deve corrispondere, ad eccezione dell'esponente; un esponente per un valore di tipo BigInt
deve essere di tipo Int
. Il tipo dell'intera espressione corrisponde al tipo dell'operando di sinistra. Per l'esponente di Int
e BitInt
, il comportamento non è definito se l'esponente è negativo o richiede più di 32 bit per rappresentare (ovvero se è maggiore di 2147483647).
Divisione e modulo per i valori di tipo Int
e BigInt
seguono il comportamento seguente per i numeri negativi:
A |
B |
A / B |
A % B |
---|---|---|---|
5 | 2 | 2 | 1 |
5 | -2 | -2 | 1 |
-5 | 2 | -2 | -1 |
-5 | -2 | 2 | -1 |
Vale a dire, a % b
ha sempre lo stesso segno di a
e b * (a / b) + a % b
è sempre uguale a a
.
Q# non supporta le conversioni automatiche tra tipi di dati aritmetici o altri tipi di dati. Questa è un'importanza particolarmente importante per il Result
tipo di dati e semplifica la propagazione delle informazioni di runtime. Offre il vantaggio di evitare errori accidentali, ad esempio quelli correlati alla perdita di precisione.