Saltar al contenido principal
LibreTexts Español

4.4: Operaciones bit a bit

  • Page ID
    82486
  • \( \newcommand{\vecs}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} } \) \( \newcommand{\vecd}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash {#1}}} \)\(\newcommand{\id}{\mathrm{id}}\) \( \newcommand{\Span}{\mathrm{span}}\) \( \newcommand{\kernel}{\mathrm{null}\,}\) \( \newcommand{\range}{\mathrm{range}\,}\) \( \newcommand{\RealPart}{\mathrm{Re}}\) \( \newcommand{\ImaginaryPart}{\mathrm{Im}}\) \( \newcommand{\Argument}{\mathrm{Arg}}\) \( \newcommand{\norm}[1]{\| #1 \|}\) \( \newcommand{\inner}[2]{\langle #1, #2 \rangle}\) \( \newcommand{\Span}{\mathrm{span}}\) \(\newcommand{\id}{\mathrm{id}}\) \( \newcommand{\Span}{\mathrm{span}}\) \( \newcommand{\kernel}{\mathrm{null}\,}\) \( \newcommand{\range}{\mathrm{range}\,}\) \( \newcommand{\RealPart}{\mathrm{Re}}\) \( \newcommand{\ImaginaryPart}{\mathrm{Im}}\) \( \newcommand{\Argument}{\mathrm{Arg}}\) \( \newcommand{\norm}[1]{\| #1 \|}\) \( \newcommand{\inner}[2]{\langle #1, #2 \rangle}\) \( \newcommand{\Span}{\mathrm{span}}\)\(\newcommand{\AA}{\unicode[.8,0]{x212B}}\)

    A veces te gustaría realizar operaciones bit a bit en lugar de matemáticas ordinarias. Por ejemplo, ¿y si quieres lógicamente Y dos variables, poco a poco? Las operaciones bitwise son muy comunes cuando se programan microcontroladores como un medio para establecer, borrar y probar bits específicos en registros de control (por ejemplo, establecer un pin específico en un puerto digital para el modo de lectura en lugar del modo de escritura). C tiene una serie de operadores bit a bit. Ellos son:

    Tabla\(\PageIndex{1}\): Operadores bit a bit.
    & Y
    | O
    ^ XOR
    ~ El Complemento
    >> Cambio a la derecha
    << Mayús a la izquierda

    Tenga en cuenta el doble uso de & para “dirección de” y ahora AND. La operación unaria es siempre “dirección de”, y la operación binaria es siempre Y, por lo que a & b no implicaría la dirección de b. Si quisieras AND x con y, desplaza el resultado 2 lugares a la izquierda y asignas el resultado a z, usarías:

    z = (x&y)<<2;

    Veamos algunos ejemplos. Supongamos que las variables X, Y y Z son caracteres sin signo. X e Y se establecen en 13 y 134, respectivamente. En hexadecimal, eso es 0x0d y 0x86 para patrones de bits de 00001101 y 10000110.

    Z = X<<3;    // Z is 01101000 or 0x68
    Z = X>>1;    // Z is 00000110 or 0x06
    Z = ~X;      // Z is 11110010 or 0xf2
    Z = X|Y;     // Z is 10001111 or 0x8f
    Z = X&Y;     // Z is 00000100 or 0x04
    Z = X^Y;     // Z is 10001011 or 0x8b
    

    This page titled 4.4: Operaciones bit a bit is shared under a CC BY-NC-SA 4.0 license and was authored, remixed, and/or curated by James M. Fiore via source content that was edited to the style and standards of the LibreTexts platform; a detailed edit history is available upon request.