Ponieważ nie używasz żadnego sufiksu, literały 13
i 4
są interpretowane jako liczby całkowite:
Podręcznik :
Jeśli dosłowne ma sufiks, ma pierwszy z tych typów, w której jego wartość może być reprezentowane: int
, uint
, long
, ulong
.
Tak więc, ponieważ deklarujesz 13
jako liczbę całkowitą, zostanie wykonany podział całkowity:
Podręcznik :
W przypadku operacji w postaci x / y w celu wybrania określonej implementacji operatora jest stosowane rozpoznawanie przeciążenia operatora binarnego. Operandy są konwertowane na typy parametrów wybranego operatora, a typ wyniku jest typem zwracanym operatora.
Wstępnie zdefiniowane operatory dzielenia są wymienione poniżej. Wszystkie operatory obliczają iloraz x i y.
Dzielenie całkowite:
int operator /(int x, int y);
uint operator /(uint x, uint y);
long operator /(long x, long y);
ulong operator /(ulong x, ulong y);
I tak następuje zaokrąglenie w dół:
Dzielenie zaokrągla wynik w kierunku zera, a wartością bezwzględną wyniku jest największa możliwa liczba całkowita, która jest mniejsza niż wartość bezwzględna ilorazu dwóch operandów. Wynik jest równy zero lub dodatni, gdy dwa operandy mają ten sam znak i zero lub ujemny, gdy dwa operandy mają przeciwne znaki.
Jeśli wykonasz następujące czynności:
int x = 13f / 4f;
Otrzymasz błąd kompilatora, ponieważ dzielenie zmiennoprzecinkowe ( /
operator 13f
) powoduje powstanie liczby zmiennoprzecinkowej, której nie można niejawnie rzutować na wartość int.
Jeśli chcesz, aby dzielenie było dzieleniem zmiennoprzecinkowym, musisz sprawić, że wynik będzie zmiennoprzecinkowy:
float x = 13 / 4;
Zauważ, że nadal będziesz dzielił liczby całkowite, które niejawnie zostaną rzutowane na zmiennoprzecinkowe: wynik będzie 3.0
. Aby jawnie zadeklarować operandy jako zmiennoprzecinkowe, używając f
sufiksu ( 13f
, 4f
).
integer
podział, a niefloating point
podział.