Saltar al contenido

Operadores Bit a Bit

Descripción General

Los operadores bit a bit (también conocidos como operadores de bits) son caracteres que representan acciones (operaciones bit a bit) que se realizan en bits individuales. Según el proveedor de la base de datos, las operaciones bit a bit se pueden realizar en columnas int y byte y permiten crear una columna que contenga varios estados de información.

El caso de uso más común para los operadores bit a bit es utilizar valores numéricos donde los bits del número se utilizan para contener los bits de información:

  • 1: ...0001- 2: ...0010- 4: ...0100
  • ...

Los operadores bit a bit se pueden utilizar con cualquier opción relacionada que no sea exclusiva (no funcionaría en una lista desplegable) y se utilizan comúnmente para acceso/seguridad (acceso de lectura/escritura).

Operadores Bit a Bit Admitidos

Operador Tipo Descripción Ejemplo
& Y Devuelve solo los bits que ambos argumentos tienen en común 1001 y 0011 = 0001
| O Devuelve cualquier bit que tenga cualquiera de los argumentos 1001 | 0011 = 1011
^ O exclusivo Devuelve solo los bits que solo uno de los argumentos tiene 1001 ^ 0011 = 1010
~ Niega Invierte todos los bits de un solo argumento ~1001 = 0110

Ejemplo de Escenario

Los operadores bit a bit se pueden utilizar en un escenario de tipo Schedule, donde se desea mostrar indicadores de tipo bit que representan los días de la semana para diferentes programaciones. Aquí utilizaríamos la lógica para obtener los indicadores de bit compuestos que representan los días laborables y los fines de semana.

bitwiseexample.png

En este escenario de ejemplo, asumimos que hay una tabla de días y asignaremos cada bit a un día de la semana:

DayID ID en bits Día (columna de enumeración)
1 0000001 Domingo
2 0000010 Lunes
4 0000100 Martes
8 0001000 Miércoles
16 0010000 Jueves
32 0100000 Viernes
64 1000000 Sábado

También podemos tener registros combinados:

DayID ID en bits Día (columna de enumeración)
62 0111110 Día laborable
65 1000001 Fin de semana

Con esta configuración, podríamos usar esto para un cronograma:

Cronograma ID del día ID del día en bits
Se ejecuta los lunes 2 0000010
Funciona los viernes 32 0100000
Se realiza los martes y miércoles 12 0001100

Nota

Tenga en cuenta que no habrá FK en este escenario, ya que no se describirán todas las combinaciones posibles en la tabla de días. En realidad, es posible que la tabla de días ni siquiera sea necesaria, pero resulta de ayuda en este escenario.

Ahora podemos usar los operadores bit a bit para agregar, eliminar o verificar lo siguiente:

  • Agrega el viernes al cronograma: UPDATE Schedule Set DayID = DayID | Enum(Day, 'Friday') WHERE ....
  • Alterna el viernes desde el cronograma: UPDATE Schedule Set DayID = DayID ^ Enum(Day, 'Friday') WHERE ....- Comprueba si funciona los viernes: IIF(DayID & Enum(Day, 'Friday') = Enum(Day, 'Friday'), 'Runs on Fridays', 'Don't run on Fridays')- Comprueba si funciona durante todo el fin de semana: IIF(DayID & Enum(Day, 'Weekend') = Enum(Day, 'Weekend'), 'Runs on the whole Weekend', 'Don't run on Saturday and Sunday')
  • Comprueba si funciona al menos un día del fin de semana: IIF(DayID & Enum(Day, 'Weekend') > 0, 'Runs on a weekend day', 'Don't run on any weekend day')

Ejemplos de Lógica

Dependiendo de su situación, la lógica de programación requerida puede ser simple o más compleja. Siguiendo con nuestro ejemplo de programación, si todas las opciones de día representan una sola bandera, su lógica puede ser simple. Por ejemplo: S.DayId ^ D.DayId

Si utiliza indicadores de bits compuestos (día laborable y fin de semana), es posible que necesite una lógica más compleja. Por ejemplo: IIF(S.DayId & D.DayId > 0, S.DayId ^ (S.DayId & D.DayId), S.DayId | D.DayId)