Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

344
Views
¿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 answers
Answer question

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 Report

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!