Comprensión profunda de los operadores bit a bit: el encanto de las operaciones bit a bit

Recientemente, mientras revisaba el código de otras personas, descubrí accidentalmente un operador de asignación bit a bit. Como nunca había estado expuesto a este operador en mi experiencia de desarrollo anterior, decidí realizar una investigación de datos en profundidad. Descubrí que, si bien es posible que no se utilicen tan ampliamente como algunos de los operadores más comunes, en algunas situaciones pueden ser una herramienta poderosa para resolver problemas. En este artículo, profundizaremos en los operadores bit a bit y aprenderemos más sobre cómo funcionan y sus aplicaciones prácticas en programación.

¿Qué son los operadores bit a bit?

operador bit a bit

Los operadores bit a bit son un conjunto de operadores especiales que se utilizan para realizar operaciones a nivel de bits. Operan en cada bit de la representación binaria de datos de tipo entero, lo que permite al programador realizar varias operaciones bit a bit. En la mayoría de los lenguajes de programación, los operadores bit a bit comunes incluyen &(Y), |(O), ^(XOR), ~(NOT), etc.

operador de asignación bit a bit

Los operadores de asignación bit a bit |=, &=y ^=son operadores de asignación compuestos que combinan los operadores bit a bit OR |, bit a bit AND &y bit a bit XOR ^y el operador de asignación respectivamente =. La función de estos operadores es realizar las operaciones de bits correspondientes sobre el valor actual de una variable y otro valor, y luego asignar el resultado a la variable.

  • a |= b: Realice una operación OR bit a bit sobre el valor de la variable a y el valor de la variable b, y asigne el resultado a a.
  • a &= b: realice una operación AND bit a bit sobre el valor de la variable a y el valor de la variable b, y asigne el resultado a a.
  • a ^= b: realice una operación XOR bit a bit sobre el valor de la variable a y el valor de la variable b, y asigne el resultado a a.

Nota: ~El operador es un operador unario, pero es un =operador de asignación, por lo que no se puede utilizar junto con el signo igual.

Operadores y reglas de operación.

**operador significado Reglas de operación**
& Bit a bit Y Y los bits correspondientes de dos números binarios. Solo cuando ambos bits son 1, el bit de resultado es 1, de lo contrario es 0
| O bit a bit O los bits correspondientes de dos números binarios. Solo cuando ambos bits son 0, el bit de resultado es 0, de lo contrario es 1
^ XOR bit a bit Realice una operación XOR en los bits correspondientes de dos números binarios. Si los dos bits son diferentes, el bit de resultado es 1, de lo contrario es 0
~ Negación bit a bit/no Invertirá el valor de cada bit de un número binario, cambiando de 0 a 1 y de 1 a 0.

Ejemplo

  • Bit a bit Y
5 & 3 = 1 

//5 二进制表示为 00000101
//3 二进制表示为 00000011
//1 二进制表示为 00000001

  • O bit a bit
5 | 3 = 7

//5 二进制表示为 00000101
//3 二进制表示为 00000011
//7 二进制表示为 00000111

  • XOR bit a bit
5 ^ 3 = 6 

//5 二进制表示为 00000101
//3 二进制表示为 00000011
//6 二进制表示为 00000110

  • Negación bit a bit/no
~5  = -6 

//5  二进制表示为 00000101
//-6 二进制表示为 11111010

solicitud

Estos operadores de asignación bit a bit se utilizan ampliamente en muchos escenarios de programación. A continuación se muestran algunos ejemplos y casos de uso:

Bandera de estado de gestión

Los bits de indicador de estado se utilizan para indicar si se cumple una determinada condición o si se activa un determinado estado. Puede utilizar |=para configurar la bandera y utilizar &=para borrar la bandera.

public class StateManager {
    
    
    private int currentState = 0;

    // 状态标志
    private static final int STATE_A = 1; // 0001
    private static final int STATE_B = 2; // 0010
    private static final int STATE_C = 4; // 0100

    // 设置状态标志
    public void setStateA() {
    
    
        currentState |= STATE_A; // 启用状态A
    }

    public void setStateB() {
    
    
        currentState |= STATE_B; // 启用状态B
    }

    public void setStateC() {
    
    
        currentState |= STATE_C; // 启用状态C
    }

    // 检查状态
    public boolean isStateA() {
    
    
        return (currentState & STATE_A) != 0; // 检查状态A是否已启用
    }

    public boolean isStateB() {
    
    
        return (currentState & STATE_B) != 0; // 检查状态B是否已启用
    }

    public boolean isStateC() {
    
    
        return (currentState & STATE_C) != 0; // 检查状态C是否已启用
    }

    // 清除状态标志
    public void clearStateA() {
    
    
        currentState &= ~STATE_A; // 禁用状态A
    }

    public void clearStateB() {
    
    
        currentState &= ~STATE_B; // 禁用状态B
    }

    public void clearStateC() {
    
    
        currentState &= ~STATE_C; // 禁用状态C
    }

    // 其他操作
    // ...
}

gestión de autoridad

En la gestión de permisos, puede utilizar |=para otorgar permisos dinámicamente a los usuarios y utilizar &=para revocar permisos.

int userPermissions = 0;
int READ_PERMISSION = 1;    // 0001
int WRITE_PERMISSION = 2;   // 0010

// 赋予用户读权限
userPermissions |= READ_PERMISSION; // 用户现在拥有了读权限

// 撤销用户写权限
userPermissions &= ~WRITE_PERMISSION; // 用户不再拥有写权限

Operación de máscara de bits

Las máscaras de bits son una herramienta común para habilitar o deshabilitar múltiples opciones o interruptores. Al usar |= 和 &=`, puede establecer o borrar bits específicos en una máscara de bits.

int options = 0;
int OPTION1 = 1; // 0001
int OPTION2 = 2; // 0010

// 启用 OPTION1
options |= OPTION1; // options 变为 0001

// 禁用 OPTION2
options &= ~OPTION2; // options 变为 0001 & ~0010 = 0001

Cifrado y descifrado de datos

El operador XOR bit a bit ^se utiliza a menudo en el cifrado y descifrado de datos. A través de ^=, puede cifrar y descifrar datos.

byte data = 0x5A; // 01011010
byte key = 0x3C;  // 00111100

// 数据加密
data ^= key; // data 变为 01100110

// 数据解密
data ^= key; // data 变回 01011010

en conclusión

Aunque los operadores bit a bit no se utilizan con mucha frecuencia en la programación diaria, son herramientas potentes que se pueden utilizar en muchas situaciones diferentes. Al tener un conocimiento profundo de cómo funcionan estos operadores y sus aplicaciones prácticas, los programadores pueden utilizarlos mejor para resolver problemas y mejorar la eficiencia y legibilidad de su código. Esperamos que este artículo le haya ayudado a comprender mejor los operadores bit a bit y a utilizarlos en todo su potencial en la programación.

Supongo que te gusta

Origin blog.csdn.net/weixin_44002151/article/details/132706611
Recomendado
Clasificación