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.
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)