Estoy trabajando en un proyecto de programación y una de las cosas que debo hacer es escribir una función que devuelve una máscara que marca la posición de los menos significativos de 1 bit. Alguna idea de cómo puedo determinar la posición utilizando operadores bit a bit?

ex: 
0000 0000 0000 0000 0000 0000 0110 0000 = 96
What can I do with the # 96 to turn it into:
0000 0000 0000 0000 0000 0000 0010 0000 = 32

He estado golpeando mi cabeza contra la pared durante horas tratando de averiguar eso cualquier ayuda sería muy apreciada!

  • No es un duplicado. Se me olvidó mencionar que tiene que ser el uso de operadores bit a bit
  • No un duplicado. El objetivo no es obtener el índice del bit más bajo, pero el valor.
  • Lo siento, mi error. Cerca de voto se retractó.
  • Obteniendo el valor del índice es trivial (1 << index).
  • Sí, pero para obtener el valor a través del índice que es ineficiente. Usted está realizando una operación costosa la inversión en lugar de resolver el problema directamente.
InformationsquelleAutor Riptyde4 | 2013-09-14

2 Comentarios

  1. 46
    x &= -x; /* clears all but the lowest bit of x */
    • Puede usted explicar esto? Me gustaría entender cómo funciona. y cuál es la diferencia entre el uso de x & -x? y x &= -x?
    • Para un entero de tipo, -x es equivalente a TYPE_MAX – x + 1, que es equivalente a ~x + 1. Es más fácil ver por qué x &= ~x + 1 obras.
    • Ver Tavian comentario de la explicación.
    • Mod abajo – cuestión era encontrar la «posición» – esta función simplemente devuelve el valor de bits
    • OP da un ejemplo de la intención de la salida
  2. 2

    Un código más legible:

    int leastSignificantBit(int number)
    {
        int index = 0;
    
        while ((~number) & 1) {
            number >>= 1;
            index++;
        }
        return 1 << index;
    }
    • El texto «un código más legible» es engañoso. Este es un enfoque alternativo que realiza una operación costosa (bit de búsqueda, en esencia, un tipo de registro), a continuación, invierte para obtener la respuesta, en lugar de calcular la respuesta directamente.
    • Yo entiendo. Pero esto no requiere de conocimientos acerca de complemento a dos, es por ello que su «simple». Pero estoy de acuerdo con usted, es mucho más caro.
    • Quien votada abajo, no creo que el downvote era necesario…

Dejar respuesta

Please enter your comment!
Please enter your name here