Pregunta ¿Alguna vez has tenido que usar el cambio de bit en proyectos reales?


Alguna vez has tenido que usar cambio de bit en proyectos de programación real? La mayoría (si no todos) los lenguajes de alto nivel tienen operadores de turno en ellos, pero ¿cuándo los necesitaría realmente?


76


origen


Respuestas:


Todavía escribo código para sistemas que no tienen soporte de coma flotante en el hardware. En estos sistemas necesita un cambio de bit para casi toda su aritmética.

También necesita turnos para generar hashes. La aritmética polinómica (CRC, Códigos Reed-Solomon son las aplicaciones principales) o también utiliza los cambios.

Sin embargo, los turnos solo se usan porque son prácticos y expresan exactamente lo que el escritor pretendía. Puede emular todos los cambios de bit con multiplicación si así lo desea, pero sería más difícil de escribir, menos legible y, a veces, más lento.

Los compiladores detectan casos donde la multiplicación se puede reducir a un cambio.


49



Sí, los he usado muchas veces. El intercambio de bits es importante en el hardware integrado donde las máscaras de bits son muy comunes. También es importante en la programación de juegos, cuando se necesita hasta el último bit de rendimiento.

Editar: Además, los utilizo mucho para manipular bitmaps, por ejemplo, cambiar la profundidad de color o convertir RGB <-> BGR.


35



  • Crear buenos valores de indicador para las enumeraciones (en lugar de escribir manualmente 1, 2, 4 ...)
  • Desempaquetar los datos de los campos de bits (muchos protocolos de red los usan)
  • Travesía de la curva Z
  • Hacks de rendimiento

Y no puedo pensar en muchos casos cuando están siendo utilizados. Por lo general, se trata de una solución alternativa: existe un problema específico, y resulta que emplear operaciones de bits arrojará los mejores resultados (generalmente en términos de rendimiento, tiempo y / o espacio).


24



Un lugar donde los uso todo el tiempo es cuando transpongo el endian-ness de enteros para aplicaciones multiplataforma. También a veces resultan útiles (junto con otros operadores de manipulación de bits) al seleccionar gráficos 2D.


14



Los he usado varias veces, pero casi siempre para analizar un formato de archivo binario.


8



Artículo razonable aquí: http://greatjustice.info/the-lost-art-of-bitmasks/


6



Los cambios de bit son rápidos. Se implementaron en conjuntos de instrucciones de CPU mucho antes de las operaciones de división y módulo. Muchos de nosotros hemos utilizado los cambios de bits para la aritmética que es simple en lápiz y papel, pero no está disponible en nuestras CPU.

Por ejemplo:

  • He usado cambios de bit para proyectos involucrando factorizar compuestos grandes en sus factores primos.
  • También he usado cambios de bit para encontrar el cuadrado y la raíz cúbica de enteros arbitrariamente grandes

6



Sí, todavía es necesario.

Aquí en mi trabajo, por ejemplo, desarrollamos software para comunicación con PLC a través del puerto serie COMx. Es necesario manejar bits dentro de un byte, utilizamos shift left / right, y los operadores lógicos O, XOR, AND en el día a día.

Por ejemplo, supongamos que necesitamos activar el bit 3 (de derecha a izquierda) de un byte:

Es mucho más eficiente de hacer:

Byte B;

B := B XOR 4;

En lugar de:

Byte B = 0;
String s;  // 0 based index

s = ConvertToBinary (B);
s[5] = "1";
B := ConvertToDecimal (s);

Saludos.


5