Confusión en la operación bit a bit
-
12-12-2019 - |
Pregunta
En primer lugar, permítanme dejar constancia de que esto es en preparación para el examen de mitad de período que tengo el miércoles.Estoy tomando un curso de programación en C y apenas hemos tocado las operaciones bit a bit, pero nos están probando.
Por ejemplo, se supone que debemos saber algo como cómo se inicializan A, B, C y D en un código como este:
unsigned int A, B, C, D;
A = 0xfedc & 0x300c;
B = 0xba98 | 0x1236;
C = 0x7654 ^ 0xfa00;
D = ~0xffff3210;
Si es posible, ¿podría proporcionarme un tutorial/guía decente para comprender estos conceptos?Una explicación también sería fantástica, pero preferiría que no me dieran una explicación de respuesta real.
Gracias de antemano por cualquier ayuda que me puedan brindar.
Solución
La primera cuestión es:
- reconoces
&
como bit a bit Y,|
como bit a bit O,^
como XOR bit a bit, y~
como bit a bit NO?
Si no, tienes uno o dos problemas y necesitas llegar al punto de reconocerlos todos.
Entonces necesitas saber qué significa cada operación...
- Para una posición de bit determinada, si ambos bits están
1
, entoncesb1 & b2
será1
;de lo contrario, será0
. - Para una posición de bit determinada, si ambos bits están
0
, entoncesb1 | b2
será0
;de lo contrario, será1
. - Para una posición de bit determinada, si los dos bits son iguales (ambos
0
o ambos1
), entoncesb1 ^ b2
será0
;de lo contrario será1
. - Para una posición de bit determinada, si el bit está
0
,~b1
será1
;de lo contrario, será0
.
También es necesario reconocer que la representación hexadecimal está estrechamente relacionada con los patrones de bits del número.
- 0x0 ⟶ 00002
- 0x1 ⟶ 00012
- ...
- 0xE ⟶ 11102
- 0xF ⟶ 11112
Combinando estos, puede deducir las respuestas a las preguntas mostradas, aplicando los operadores bit a bit a cada bit de los operandos.
Otros consejos
espero que esto ayude http://www.cprogramming.com/tutorial/bitery_opoperators.html