Operaciones de bits (incluidas OR, AND, XOR, NOR, NAND, XNOR y aplicaciones comunes como &0xFF)

Tabla de contenido

Editar

1. Operación AND bit a bit

2. Operación OR bit a bit

3. Operación de negación

4. Si la operación XOR es diferente, es 1, y si es igual, es 0.

Editar

5. Operación de cambio a la izquierda

6. Operación de cambio a la derecha

Usos comunes:

Explicación de la operación de bits en lenguaje C:



Operaciones de bits (incluidas aplicaciones comunes como OR, AND, XOR, NOR, NAND). Además, las operaciones de bits son mucho más rápidas que los operadores normales, porque las operaciones de bits son operaciones de bajo nivel, pero son más difíciles de entender.

Otras adiciones:

1. Excepto ~, todos los operadores bit a bit son operadores de oído y ojo.

2. Las operaciones solo se pueden realizar con datos enteros o de caracteres; de lo contrario, se informará un error.

Operadores bit a bit comunes

1. Operación AND bit a bit

 Por ejemplo: el resultado de 7&5 es 5, el cálculo es el siguiente:

Usos comunes:

Borrar: si desea borrar una celda a cero, Y con un valor donde todos los bits sean 0

Obtenga el número (comúnmente mantenga los ocho bits inferiores, o los 16 bits inferiores, comunes en las imágenes):

Por ejemplo, X=1001110101, después de la operación

2. Operación OR bit a bit

Por ejemplo: el resultado de 7|5 es 7, el cálculo es el siguiente:

Usos comunes:

complemento negativo

Establezca algunos ''bits'' de un número en 1. Por ejemplo: establezca los 4 bits inferiores de Z=10100110 en 1, Z|00001111 puede cumplir el propósito.

3. Operación de negación

Por ejemplo: el resultado de ~7 es -8, el cálculo es el siguiente:

Usos comunes:

Haga que el bit más bajo de un número sea 0, por ejemplo: Q&~1, el valor de ~1 es 11111111111111110. Después de la operación AND, el bit más bajo debe ser 0. La prioridad de ~ es mayor que la de los operadores aritméticos, los operadores relacionales y operadores lógicos espera

4. Si la operación XOR es diferente, es 1, y si es igual, es 0.

Por ejemplo: el resultado de 10 ^ -9 es -3. El cálculo es el siguiente:

Es decir, 0000 1010 ^ 1111 0111 = 1111 1101 (código complementario), el código original es 1000 0011, que es 10^-9 = -3

Usos comunes:

Invierta un bit específico: por ejemplo, Q=10110110, invierta los 4 bits inferiores de Q y use X ^ 0000 1111 = 1011 1001 para obtener

Diferente de 0, mantenga el valor original: Q^0000 0000 = 10110110

Intercambiar A y B:


El método de intercambio anterior no se recomienda. Existe un método de suma y resta correspondiente para intercambiar valores (como se muestra a continuación). Tampoco se recomienda. Es difícil de entender y no tan eficiente como el método de variable temporal intermedia.

5. Operación de cambio a la izquierda

 Desplaza todos los bits binarios de un operando hacia la izquierda una cierta cantidad de bits (los bits binarios de la izquierda se descartan y los bits de la derecha se rellenan con ceros).

Por ejemplo: X =18, X= X <<2, el resultado es 72. El cálculo es el siguiente:

Después del desplazamiento a la izquierda anterior de un bit, X =

6. Operación de cambio a la derecha

Desplaza todos los dígitos binarios de un número hacia la derecha una cierta cantidad de bits. Los números positivos se rellenan con 0 a la izquierda, los números negativos se rellenan con 1 a la izquierda y el lado derecho se descarta.

Por ejemplo: X =18;X= X >>2, el resultado es 4. El cálculo es el siguiente:

Usos comunes:

Cada desplazamiento a la derecha del operando en un bit equivale a dividir el número entre 2 (redondeando hacia abajo).

Aviso:

El operador de turno genera un nuevo valor en C++ pero no modifica el valor original, por ejemplo:


El valor generado por el código anterior dos veces es 108, es decir, el valor de x no se modificará. La expresión x << 2 usa el valor de x para generar un nuevo valor, al igual que x + 3 generará un nuevo valor , pero no lo hará Al igual que x se modificará, si desea utilizar el operador de desplazamiento para modificar el valor de una variable, debe utilizar el operador de asignación. Puede utilizar el operador de asignación normal o el operador <=, como :


Algunas otras aplicaciones de operaciones de bits:

 1. Determinar números pares e impares.

Para cualquier número excepto 0, use X&1==1 como juicio lógico, por ejemplo:


2. Determinar si un determinado número binario es 1



//Por ejemplo ,  determine si el quinto dígito de

 


4. Determinar si dos números tienen signos diferentes.


5. Cifrado de datos


El resultado anterior es:

Fecha inicial: Yo y mi patria
Fecha de cifrado: 混丝屋拉虖
Fecha de decodificación: Yo y mi patria

6. Tome el valor absoluto (alta eficiencia)


o


Para otras operaciones, consulte https://zhuanlan.zhihu.com/p/148790042

Además, hablemos brevemente de algunos símbolos, como OR, AND, XOR, NOR, NAND, XNOR y su implementación.


 

Explicación de la operación de bits en lenguaje C:

//Definir dos variables de 8 bits
unsigned char Byte1 = 0x15;
unsigned char Byte2 = 0xf6;

//Un byte se divide en 8 bits. Se llaman de forma diferente, pero todos tienen el mismo significado.
//Llamada 1: Bit 7, Bit 6, Bit 5, Bit 4, Bit 3, Bit 2, Bit 1. Bit 0.  
//Llamada 2: Bit7 Bit6 Bit5.Bit4 Bit3 Bit2 Bit1 Bit0  
//Llamada tres: No. 8 No. 7 No. 6 No. 5 No. 4 No. 3 No. 2 No. 1
// La tercera nomenclatura No se recomienda, se recomienda el segundo.

Byte1 |= (0x01 << 3); //Esta oración significa: Establecer el Bit3 del Byte1 en 1
Byte2 &= ~(0x01 << 6); //Esta oración significa: Establecer el Bit6 del Byte2 en 0

Explicación detallada del proceso de conteo de /*1, Byte1 |= (0x01 << 3);:
  1), |= se llama o, etc., que es similar a +=. a|=b es a=a| b, a+=b es a =a+b. Entonces Byte1 |= (0x01 << 3); es Byte1 = Byte1|(0x01 << 3);
  2), 0x01 se expresa en binario de 8 bits: 0000 0001 (Nota: Byte1 son datos de 8 bits, por lo que 8 bits se usan binarios, si el Byte1 son datos de 16 bits, use binarios de 16 bits...)
       y luego lo desplazan 3 bits hacia la izquierda, se convierte en 0000 1000.
  3) El valor de Byte1 es 0x15, es decir, 0001 0101. Byte1 o superior (0x01 << 3), que es el OR bit a bit de 0001 0101 y 0000 1000. El resultado es 0001 1101. En comparación con el valor original
        de
      Byte1
  , la diferencia es que Bit3 está establecido en 1.

  2. Explicación detallada del proceso de conteo de Byte2 &= ~(0x01 << 3);:
  1), se llama &= y, a&=b es a=a&b. Entonces Byte2 &= ~(0x01 << 3); es Byte2 = Byte2&(~(0x01 << 3));
  2), 0x01 se expresa en binario de 8 bits: 0000 0001 
       y luego se desplaza 6 bits a la izquierda, se convierte en 0100 0000
       Después de desplazarse hacia la izquierda y luego invertir, se convierte en 1011 1111
  3) El valor de Byte2 es 0xf6, que es 1111 0110. Byte2 y el anterior ~ (0x01 << 6) son el AND bit a bit de 1111 0110 y 1011 1111. 1111 0110 y
        1011
      1111
  El resultado es 1011 0110. Comparado con el valor original de Byte1, la diferencia es que Bit6 se establece en 0
*/

Conocimiento de convertir valores hexadecimales en valores decimales

/*
Conocimientos relacionados:
Métodos para convertir números hexadecimales en valores decimales.Por
ejemplo:Convierta el número hexadecimal 0xAE en un número decimal.

Método 1:
Convertir a binario y luego convertir a binario decimal:
La representación binaria de 0xAE: 1 0 1 0 1 1 1 0 El
valor decimal correspondiente para cada dígito: 128 64 32 16 8 4 2 1
El valor decimal final es 128 + 32 + 8+ 4+2 = 174

Método 2: 
el hexadecimal se convierte directamente al valor decimal
0xAE: A es 10, E es 14 y la base es 16,
por lo que 0xAE es igual a 10x16 elevado a la 1.ª potencia + 14x16 elevado a la 0.ª potencia = 174

*/
 

Supongo que te gusta

Origin blog.csdn.net/s_nshine/article/details/132506906
Recomendado
Clasificación