Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

351
Vistas
¿Por qué 11010100 << 1 es igual a 110101000, no a 10101000?

¿Por qué cuando trato de cambiar bits para 11010100 2 , el resultado es 110101000 2 , no 10101000 2 ?

 int a = Integer.parseInt("11010100", 2) << 1;

Intento hacer esto:

 int a = (byte)(Integer.parseInt("11010100", 2) << 1);

Pero si el valor de salida es mayor que 128, todo va a menos, lo cual es lógico. ¿Cómo puedo hacer que esa cantidad de bits no cambie?

over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

Si desea establecer en 0 todos los bits superiores a los 8 bits inferiores, puede usar AND bit a bit:

 int a = (Integer.parseInt("11010100", 2) << 1) & 0xff; System.out.println (Integer.toString(a,2));

Producción:

 10101000
over 4 years ago · Santiago Trujillo Denunciar

0

Vamos a dar un paso a la vez.

  1. Integer.parseInt("11010100", 2) - este es el valor int 212. Esto es, por cierto, innecesario; simplemente puede escribir: 0b11010100 .

  2. 0b11010100 << 1 es lo mismo que 0b110101000 y es 424.

  3. Luego lo convierte en un byte: (byte)(0b11010100 << 1) . Los bits más allá de los primeros 8 se eliminan, lo que deja 0b10101000, que es -88. Menos, sí, porque en Java los bytes están firmados.

  4. Luego, en silencio, convierte este -88 de nuevo en int, mientras lo asigna a un valor int. Sigue siendo -88, lo que significa que todos los bits superiores son todos 1.

Por lo tanto, el valor final es -88 .

Si desea ver 168 en su lugar (que son exactamente los mismos bits, pero se muestran sin firmar en lugar de con firma), el truco habitual es usar & 0xFF , que establece todos los bits excepto los primeros 8 en 0, lo que garantiza un número positivo:

 byte b = (byte) (0b11010100 << 1); System.out.println(b); // -88. It is not possible to print 168 when printing a byte. int asUnsigned = b & 0xFF; System.out.println(asUnsigned); // 168. // or in one go: System.out.println(((byte) (0b11010100 << 1)) & 0xFF); // 168
over 4 years ago · Santiago Trujillo Denunciar

0

Prueba algo como esto:

 int anInt = Integer.parseInt("11010100", 2) << 1; int asUnsignedInt= Byte.toUnsignedInt((byte) anInt);

toUnsignedInt se ha introducido en Java SE 8.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda