Foros del Web » Programación para mayores de 30 ;) » Java »

[SOLUCIONADO] [Java] Consulta codigo

Estas en el tema de [Java] Consulta codigo en el foro de Java en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 06/03/2015, 17:11
 
Fecha de Ingreso: marzo-2015
Mensajes: 3
Antigüedad: 9 años, 8 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
  #2 (permalink)  
Antiguo 07/03/2015, 04:12
Avatar de Xerelo  
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 15 años, 6 meses
Puntos: 306
Respuesta: [Java] Consulta codigo

¿Qué hace el operador & con números binarios?

Compara bit a bit, y si los dos son 1 pone un 1.

a= 01001 = 9
&
b= 11000 = 24
=
c= 01000 = 8

En tu caso estás operando con un b 00000...0001

¿dónde puedes tener 1? Teniendo en cuenta que en "b" todo son ceros salvo la última posición...

tu resultado siempre será un 0 salvo que el último bit del primer número "a" sea 1, o lo que es lo mismo tendrás un 1 cuando "a" sea impar y un 0 cuando "a" sea par.

-1431655766&0x01=0
1431655765&0x01=1
715827882&0x01=0
357913941&0x01=1
178956970&0x01=0
89478485&0x01=1
44739242&0x01=0
22369621&0x01=1
11184810&0x01=0
5592405&0x01=1
2796202&0x01=0
1398101&0x01=1
699050&0x01=0
349525&0x01=1
174762&0x01=0
87381&0x01=1
43690&0x01=0
21845&0x01=1
10922&0x01=0
5461&0x01=1
2730&0x01=0
1365&0x01=1
682&0x01=0
341&0x01=1
170&0x01=0
85&0x01=1
42&0x01=0
21&0x01=1
10&0x01=0
5&0x01=1
2&0x01=0
1&0x01=1
__________________
Cada vez que solucionas los problemas de alguien que no se esfuerza, piensa en que el día de mañana puede llegar a ser tu compañero de trabajo, o peor, tu jefe.
  #3 (permalink)  
Antiguo 14/03/2015, 11:17
 
Fecha de Ingreso: marzo-2015
Mensajes: 3
Antigüedad: 9 años, 8 meses
Puntos: 0
Respuesta: [Java] Consulta codigo

Excelente me ha quedado muy claro muchas gracias estimado :D

Etiquetas: valor
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:53.