Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

366
Visualizações
¿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 Respostas
Responde à pergunta

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 Relatório

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda