Operaciones de bits en lenguaje C
& amp bit a bit y
bit a bit "o"
bit a bit exclusivo OR
Adoptar el actitud opuesta
& lt& ltMove left
& gt& gtMove right Descripción: 1. Excepto ∽, todos los operadores bit a bit son operadores binarios (elementos), es decir, requieren un operando en cada lado. 2. El operando sólo puede ser datos plásticos o de caracteres, no datos reales. El operador AND bit a bit (&) se especifica de la siguiente manera: 0 & 0 = 0 0 & amp1=0 & amp1=0 1 & amp 1=1 Ejemplo: 3 & 5=?
Primer uso de números complementarios. para representar 3 y 5, y luego realizar operaciones bit a bit. Complemento a 3: 00000011
Complemento a 5: 00000101 -.
&:000000013 &5=1 El operador OR bit a bit (|) se especifica de la siguiente manera: 0 | 0 = 00 &1=1 0 = 1 1 &1=1 Por ejemplo: 060|017=?
Operación bit a bit del número octal 60 y del número octal 17. 060 00110000
017 00001111 -
|:001111160 | 017 = 077 El operador XOR (∧), también conocido como operador XOR, es el siguiente: 0∧0 = 0 0 ∧1 ∧0 = 1 1∧654438
El número decimal 57 y el número decimal 42 se realizan mediante XOR bit a bit. 57 00111001
42 00101010 -
∧:00010011 57∧42 = 19 El operador de negación (∽) se especifica de la siguiente manera: ∽ 0 = 1 ∽ 65438.
La negación bit a bit del número octal 25 (es decir, binario 00000000010101). 0000000000010101
↓
111111111110101065438. Si el desplazamiento a la izquierda de bits altos se desborda, se descartará y no tendrá ningún efecto. Por ejemplo: a = a
Desplaza el número binario de A 2 bits hacia la izquierda y suma 0 a la derecha.
Si a=15, que es el número binario 0000111, entonces a 0000111.
↓ ↓
a & lt& lt1 00011110
↓ ↓
a & lt& lt2 00111100 último a=60 desplazamiento a la derecha El operador (> & gt) desplaza todos los dígitos binarios de un número hacia la derecha varios bits, descartando los bits bajos. Ejemplo: a = a & gt& gt2
Desplaza el número binario de A 2 bits hacia la derecha y suma 0 a la izquierda.
Si a=15, que es el número binario 0000111, entonces a 0000111.
↓ ↓
a & gt& gt1 00000111
↓ ↓
a & gt& gt2 000000011Finalmente, a=operador de 3 bits Puede combinarse con operadores de asignación para formar operadores de asignación extendidos, como: =, |=, & gt& gt=, & lt& lt=, ∧ = Ejemplo: A & =b es equivalente a A = A & b a & lt& lt= 2 es equivalente a a = a
Ejemplo: Tome un número entero A con 4∽7 dígitos desde la derecha, considere lo siguiente: 1.
Primero, A se mueve 4 dígitos hacia la derecha, es decir, a & gt& gt4 2. Suponga un número con los cuatro bits inferiores todos cero, es decir, ∽(∽0 < & lt; 4) 3. Las dos expresiones anteriores, es decir A>>4&∽(∽0<<4) El programa es el siguiente: main() {unsigned a, b, c, d </p ><p & gtscanf("%o", & ampa);& lt/p & gt;& ltp & gtb = a & gt& gt4;& lt/p & gt; ;<p>d = b&c;</p><p>printf("%o\n%o\n ",a,b); </p><p>result :331↙331 (valor de a, octal) 15 (valor de d, octal) Ejemplo: desplazamiento circular. Es necesario cambiar A en el ciclo correcto. Es decir, A se gira hacia la derecha n bits y los bits izquierdos originales (16-n) en A se mueven n bits. Ahora supongamos que dos bytes contienen un número entero. Como se muestra en la imagen de la derecha. Considere las siguientes situaciones: 1. Primero coloque los n bits correctos de A en los n bits altos de B, es decir, B = A & gtN 3; Realice una operación OR bit a bit en C y B, es decir, C = c=c|b B. El programa es el siguiente: main() {unsigned a, B, C; a=%o,n=%d",&一,&n);</p><p>b = a<<(16-n);</p>& ltp & gtc = a & gt& gtn; & lt/p & gt ; & ltp & gtc = c | b; & lt/p & gt; & ltp & gtprintf("%o\n%o ", a, c) ;</p><p>Resultado: A = 157653, n = 3↙ Campo de 331 (valor de a, octal) 15 (valor de d, octal).
Un segmento de bits es un miembro de un tipo de estructura cuya longitud está definida en bits. Ejemplo: datos empaquetados estructurados { unsigned a: 2; & lt/p & gt; & ltp & gt unsigned b: 6; <p>unsignedd:4;</p><p>int I;</p><p>}data; p>