¿Cómo puedo configurar todos los bits a '1' en un número binario de un tamaño desconocido?

StackOverflow https://stackoverflow.com/questions/818535

  •  03-07-2019
  •  | 
  •  

Pregunta

Estoy tratando de escribir una función en ensamblador (pero supongamos que el lenguaje es independiente de la pregunta).

¿Cómo puedo usar operadores bit a bit para establecer todos los bits de un número pasado en 1?

Sé que puedo usar el bit a bit " o " con una máscara con los bits que deseo establecer, pero no sé cómo construir una máscara basada en un número binario de tamaño N.

¿Fue útil?

Solución

~ (x & amp; 0)

x & amplificador; 0 siempre dará como resultado 0, y ~ cambiará todos los bits a 1s.

Otros consejos

Ajústelo a 0, luego cambie todos los bits a 1 con un bit-NOT.

Encontrará que en lenguaje ensamblador tiene para saber el tamaño de un " pasado en el número " ;. Y en lenguaje ensamblador realmente importa para qué máquina es el lenguaje ensamblador.

Dada esa información, es posible que pregunte

  • ¿Cómo configuro un registro entero para todos los 1 bits?

o

  • ¿Cómo lleno una región en la memoria con todos los 1 bits?

Para llenar un registro con todos los 1 bits, en la mayoría de las máquinas, la forma eficiente requiere dos instrucciones:

  1. Borre el registro, utilizando una instrucción de borrado de propósito especial, o cargue 0 inmediato, o xor el registro consigo mismo.

  2. Tome el complemento bit a bit del registro.

La memoria de llenado con 1 bits requiere 1 o más instrucciones de almacenamiento ...

Encontrarás muchos más trucos y trucos en el maravilloso libro de Hank Warren Hacker's Delight .

Establezca x en 1

Mientras x < número   x = x * 2

Respuesta = número o x - 1.

El código asume que su entrada se llama " número " ;. Debería funcionar bien para valores positivos. La nota para valores negativos que son dos complementan el intento de operación no tiene sentido ya que el bit alto siempre será uno.

Configúrelo en -1. Esto generalmente está representado por todos los bits siendo 1.

Use T(~T(0)).

Donde T es el nombre de tipo (si estamos hablando de C ++.)

Esto evita la promoción no deseada a int si el tipo es menor que <=>.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top