Ver Mensaje Individual
  #1 (permalink)  
Antiguo 06/03/2015, 17:11
JackSantana
 
Fecha de Ingreso: marzo-2015
Mensajes: 3
Antigüedad: 9 años, 2 meses
Puntos: 0
[Java] Consulta codigo

Hola estimados.
Soy nuevo en el foro y estoy aprendiendo Java leyendo el libro Piensa en java 4ta edición. Hay una parte de un ejercicio resuelto en su solucionario en el que no logro entender (lo dejare en negritas).

Código:
package E05_BitwiseOperators2;

public class E05_BitwiseOperators2 {
	
	private static void toBinaryString(int i) {
		char[] buffer = new char[32];
		int bufferPosition = 32;
			do {
				buffer[--bufferPosition] = ((i & 0x01) != 0) ? '1' : '0';
				i >>>= 1;
			} while (i != 0);
			
			
			for(int j = bufferPosition; j < 32; j++)
				System.out.print(buffer[j]);
				System.out.println();
			}
	
	
	public static void main(String[] args) {
		int i1 = 0xaaaaaaaa;
		int i2 = 0x55555555;
		System.out.print("i1 = "); toBinaryString(i1);
		System.out.print("i2 = "); toBinaryString(i2);
		System.out.print("~i1 = "); toBinaryString(~i1);
		System.out.print("~i2 = "); toBinaryString(~i2);
		System.out.print("i1 & i1 = "); toBinaryString(i1 & i1);
		System.out.print("i1 | i1 = "); toBinaryString(i1 | i1);
		System.out.print("i1 ^ i1 = "); toBinaryString(i1 ^ i1);
		System.out.print("i1 & i2 = "); toBinaryString(i1 & i2);
		System.out.print("i1 | i2 = "); toBinaryString(i1 | i2);
		System.out.print("i1 ^ i2 = "); toBinaryString(i1 ^ i2);
		}
}

/* Output:
i1 = 10101010101010101010101010101010
i2 = 1010101010101010101010101010101
~i1 = 1010101010101010101010101010101
~i2 = 10101010101010101010101010101010
i1 & i1 = 10101010101010101010101010101010
i1 | i1 = 10101010101010101010101010101010
i1 ^ i1 = 0
i1 & i2 = 0
i1 | i2 = 11111111111111111111111111111111
i1 ^ i2 = 11111111111111111111111111111111
*/

Lo que entiendo es que es un operador ternario y que cuando la condición es verdadera asocia el valor 1 a la posición actual del array y 0 cuando la condición es falsa.

Lo corrí en modo Debug para ver como se comportaban las variables y lo que no logro entender es porque se da la condición de false (de manera intercalada) si según yo tanto el numero i como 0x01 siempre debieran dar true ya ambos siempre son distintos de 0 Es obvio que estoy entendiendo mal, pero no logro ver bien la cosa y si alguien de acá me puede explicar el concepto, llevo dos días tratando de entender solo esa parte. El código esta bueno.

Saludos y gracias de antemano.

Última edición por JackSantana; 06/03/2015 a las 17:38