Como no utiliza ningún sufijo, los literales 13
y 4
se interpretan como enteros:
Manual :
Si el literal no tiene sufijo, que tiene el primero de este tipo en el que su valor se puede representar: int
, uint
, long
, ulong
.
Por lo tanto, dado que declaras 13
como entero, se realizará la división de enteros:
Manual :
Para una operación de la forma x / y, la resolución de sobrecarga del operador binario se aplica para seleccionar una implementación de operador específica. Los operandos se convierten a los tipos de parámetros del operador seleccionado, y el tipo del resultado es el tipo de retorno del operador.
Los operadores de división predefinidos se enumeran a continuación. Todos los operadores calculan el cociente de x e y.
División entera:
int operator /(int x, int y);
uint operator /(uint x, uint y);
long operator /(long x, long y);
ulong operator /(ulong x, ulong y);
Y así ocurre el redondeo:
La división redondea el resultado hacia cero, y el valor absoluto del resultado es el entero más grande posible que es menor que el valor absoluto del cociente de los dos operandos. El resultado es cero o positivo cuando los dos operandos tienen el mismo signo y cero o negativo cuando los dos operandos tienen signos opuestos.
Si haces lo siguiente:
int x = 13f / 4f;
Recibirá un error del compilador, ya que una división de punto flotante (el /
operador de 13f
) da como resultado un flotante, que no se puede convertir a int implícitamente.
Si desea que la división sea una división de punto flotante, deberá hacer que el resultado sea flotante:
float x = 13 / 4;
Tenga en cuenta que aún dividirá enteros, que se convertirán implícitamente en flotantes: el resultado será 3.0
. Para declarar explícitamente los operandos como flotantes, utilizando el f
sufijo ( 13f
, 4f
).
integer
división, nofloating point
división.