Aritmetiska uttryck
Aritmetiska operatorer är addition (+
), subtraktion (-
), multiplikation (*
), division (/
), negation (-
) och exponentiation (^
). De kan tillämpas på operander av typen Int
, BigInt
eller Double
. För integraltyper (Int
och BigInt
) är dessutom en operatör som beräknar modulus (%
) tillgänglig.
För binära operatorer måste typen av båda operanderna matcha, förutom exponenteringen. en exponent för ett värde av typen BigInt
måste vara av typen Int
. Typen av hela uttrycket matchar typen av den vänstra operanden. För exponentiation av Int
och BitInt
är beteendet odefinierat om exponenten är negativ eller kräver mer än 32 bitar för att representera (dvs. om den är större än 2147483647).
Division och modulus för värden av typen Int
och BigInt
följ följande beteende för negativa tal:
A |
B |
A / B |
A % B |
---|---|---|---|
5 | 2 | 2 | 1 |
5 | -2 | -2 | 1 |
-5 | 2 | -2 | -1 |
-5 | -2 | 2 | -1 |
Det innebär a % b
att alltid har samma tecken som a
, och b * (a / b) + a % b
är alltid lika med a
.
Q# stöder inte automatiska konverteringar mellan aritmetiska datatyper eller andra datatyper för den delen. Detta är särskilt viktigt för Result
datatypen och gör det enklare att begränsa hur körningsinformation kan spridas. Det har fördelen att undvika oavsiktliga fel, till exempel sådana som rör precisionsförlust.