Para que de bien en el segundo caso, tenes que hacer esto:
float hF;
hF = ((195f * 6f) / 255f) -1f;
Fijate que al lado de cada numero hay una "f", esto le indica al compilador que se trata de un numero del tipo float.
La explicacion es sencilla:
Cuando uno pone numeros sueltos (no contenidos en una variable), el compilador los trata como el tipo numerico por default: integer (enteros).
Cuando se operan numeros, sea de variables o "sueltos", el tipo de dato que devolvera la operacion se define por:
- en primer lugar: que tipo de datos es la variable que recibe el resultado
- en segundo lugar: que tipo de datos son los operandos
En tu ejemplo, en el segundo caso, la operacion ((195 * 6) / 255) no es una operacion que directamente se le asigne a la variable hf, sino que sera un resultado que se mantendra en memoria para operarlo con otras cosas. Por ello el primer criterio no sirve para saber si el resultado tiene que ser un entero, un floar, o cualquier otro, porque no hay una variable que vaya a reibir ese resultado especifico...
De esta manera, entra en juego el segundo criterio, que es el tipo de datos de los operandos. Esos operandos son numeros, no variables, y si no especificamos que son float (poniendoles una f al final) se toma como que son integer, el tipo de dato predeterminado. Consecuencia: el resultado de la operacion debera ser un integer.
Por ello esa primer parte devolvera 4 entero, y luego al restarle 1 da 3.
Espero haber sido claro, cualquier duda, pregunta
Suerte!
Bye!
Fisa
Correo:
[email protected]
MSN:
[email protected]