2012-04-08 11 views
9

En C, puedo escribir una sentencia ifEl uso de un bit a bit y el interior de una sentencia if

if (firstInt & 1) 

pero cuando intento y hacer lo mismo en Java, el compilador me dice "tipos incompatibles" y dice que necesita un boolean en lugar de un int. ¿Hay alguna forma de escribir ese código C en Java?

+3

La razón por la que esto funciona en C/C++ es que los lenguajes interpretan expresiones dentro de condicionales al comparar implícitamente sus resultados a cero. Java es muy estricto en este sentido, y requiere una expresión booleana en los condicionales. – dasblinkenlight

+0

No es solo implícito; C ni siquiera tiene un tipo booleano. – Taymon

+0

@Taymon C tiene el tipo booleano '_Bool' y la macro' bool' en 'stdbool.h' que se expande a' _Bool' – ouah

Respuesta

22

Cualquiera de los siguientes debe trabajar para usted:

if ((firstInt & 1) != 0) 
if ((firstInt & 1) > 0) 
if ((firstInt & 1) == 1) 
+0

+1. También podría hacer '(firstInt & 1) == 1'. –

+3

Tenga en cuenta que los parens (que he agregado) son necesarios para la corrección. En Java, los operadores de comparación se unen más estrechamente que los operadores bit a bit binarios. – Taymon

+0

Gracias esto funcionó. Aceptaré tu respuesta tan pronto como me lo permita. – user1310650

1

En C una expresión entera se puede utilizar de forma implícita como una expresión booleana (aunque yo diría que es una mala idea), donde cero es falsa y cualquier valor distinto de cero es verdadero.

En Java no está permitido, por lo que debe hacer que la expresión sea explícitamente booleana comparando el resultado entero con algún otro valor entero o expresión usando un operador de comparación.

Cuestiones relacionadas