Como você não usa nenhum sufixo, os literais 13
e 4
são interpretados como número inteiro:
Manual :
Se o literal tem nenhum sufixo, tem o primeiro desses tipos em que o seu valor pode ser representados: int
, uint
, long
, ulong
.
Assim, como você declara 13
como inteiro, a divisão inteira será realizada:
Manual :
Para uma operação no formato x / y, a resolução de sobrecarga do operador binário é aplicada para selecionar uma implementação específica do operador. Os operandos são convertidos nos tipos de parâmetro do operador selecionado e o tipo do resultado é o tipo de retorno do operador.
Os operadores de divisão predefinidos estão listados abaixo. Todos os operadores calculam o quociente de x e y.
Divisão inteira:
int operator /(int x, int y);
uint operator /(uint x, uint y);
long operator /(long x, long y);
ulong operator /(ulong x, ulong y);
E assim ocorre o arredondamento:
A divisão arredonda o resultado para zero e o valor absoluto do resultado é o maior número inteiro possível que é menor que o valor absoluto do quociente dos dois operandos. O resultado é zero ou positivo quando os dois operandos têm o mesmo sinal e zero ou negativo quando os dois operandos têm sinais opostos.
Se você fizer o seguinte:
int x = 13f / 4f;
Você receberá um erro do compilador, pois uma divisão de ponto flutuante (o /
operador de 13f
) resulta em um ponto flutuante, que não pode ser convertido para int implicitamente.
Se você deseja que a divisão seja uma divisão de ponto flutuante, terá que transformar o resultado em flutuante:
float x = 13 / 4;
Observe que você ainda dividirá números inteiros, que serão implicitamente convertidos para flutuar: o resultado será 3.0
. Para declarar explicitamente os operandos como flutuante, usando o f
sufixo ( 13f
, 4f
).
integer
divisão, nãofloating point
divisão.