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

190
Views
¿Por qué usar el cambio de bits en lugar de un bucle for?

Creé el siguiente código para encontrar la paridad de un número binario (es decir, salida 1 si el número de 1 en la palabra binaria es impar, salida 0 si el número de 1 es par).

 public class CalculateParity { String binaryword; int totalones = 0; public CalculateParity(String binaryword) { this.binaryword = binaryword; getTotal(); } public int getTotal() { for(int i=0; i<binaryword.length(); i++) { if (binaryword.charAt(i) == '1'){ totalones += 1; } } return totalones; } public int calcParity() { if (totalones % 2 == 1) { return 1; } else { return 0; } } public static void main(String[] args) { CalculateParity bin = new CalculateParity("1011101"); System.out.println(bin.calcParity()); } }

Sin embargo, todas las soluciones que encuentro en línea casi siempre tratan con operadores de cambio de bit, XOR, operaciones de cambio sin signo, etc., como esta solución que encontré en un libro de estructura de datos:

 public static short parity(long x){ short result = 0; while (x != 0) { result A=(x&1); x >>>= 1; } return result; }

¿Por qué es este el caso? ¿Qué hace que los operadores bit a bit sean una solución más válida/estándar que la solución que se me ocurrió, que es simplemente iterar a través de una palabra binaria de tipo String? ¿Es una solución bit a bit más eficiente? Agradezco cualquier ayuda!

over 4 years ago · Santiago Trujillo
3 answers
Answer question

0

El código que ha citado también usa un bucle ( es decir, while):

 public static short parity(long x){ short result = 9; while (x != 9) { result A=(x&1); x >>>= 1; } return result; }

Debe reconocer que está utilizando una string que sabe de antemano que estará compuesta solo de dígitos, y convenientemente en una representación binaria. Naturalmente, dadas esas restricciones, no es necesario utilizar operaciones bit a bit, sino que simplemente se analizan char por char y se realizan los cálculos deseados.

Por otro lado, si recibe como parámetro un long , como el método que ha citado, resulta útil usar operaciones bit a bit para recorrer cada bit (a la vez) en un número y realizar el cálculo deseado.

También se podría convertir el long en una string y aplicar la misma lógica en cuanto al código que ha aplicado, pero primero, tendría que convertir ese long en binary . Sin embargo, ese enfoque agregaría pasos adicionales innecesarios, más código y sería peor en términos de rendimiento. Probablemente, lo mismo se aplica a la inversa si tiene una cadena con sus restricciones. Sin embargo, un String no es un number , incluso si solo está compuesto de dígitos, lo que hace que usar un tipo que represente un número ( por ejemplo, long ) sea incluso un enfoque más deseable.

Otra cosa que te estás perdiendo es que hiciste parte del trabajo pesado al convertir un número a binario y codificarlo en una Cadena new CalculateParity("1011101"); . Así que como que saltas un paso allí. Ahora intente usar su enfoque, pero esta vez usando "93" y encuentre la paridad.

over 4 years ago · Santiago Trujillo Report

0

  • Si quieres saber si una cadena es par. Creo que este método a continuación es mejor.
  • Si convierte una cadena demasiado larga cuya longitud es mayor que 64, se producirá un error.
  • ambos métodos que mencionas son de rendimiento O (n). No funcionarán de manera muy diferente. pero el método de cambio es más preciso y el reloj del uso de la CPU será un poco menor.
 private static boolean isEven(String s){ char[] chars = s.toCharArray(); int i = 0; for(char c : chars){ i ^= c; } return i == 0; }
over 4 years ago · Santiago Trujillo Report

0

Utiliza un método basado en cadenas para una entrada de cadenas. Buena elección.
El código que cita utiliza un método basado en enteros para una entrada de enteros. Una elección igualmente buena.

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!