función showbits() en C con ejemplos

Los operadores bit a bit son operadores (al igual que +, *, &&, etc.) que operan en enteros y unidades a nivel binario. Esto significa que miran directamente los dígitos binarios o bits de un número entero. Todo esto suena aterrador, pero en realidad, los operadores bit a bit son bastante fáciles de usar y también bastante útiles. Sin embargo, es importante que comprenda los números binarios y los números hexadecimales.

Operadores bit a bit

Echemos un vistazo a los diferentes operadores bit a bit:

  1. & (Y bit a bit)
  2. | (O bit a bit)
  3. ~ (bit a bit NO)
  4. ^ (XOR bit a bit)
  5. << (desplazamiento a la izquierda bit a bit)
  6. >> (desplazamiento bit a bit a la derecha)
  7. >>> (desplazamiento a la derecha bit a bit sin firmar)
  8. &= (asignación AND bit a bit)
  9. |= (asignación OR bit a bit)
  10. ^= (asignación XOR bit a bit)
  11. <<= (desplazamiento a la izquierda bit a bit y asignación)
  12. >>= (desplazamiento y asignación bit a bit a la derecha)
  13. >>>= (desplazamiento y asignación a la derecha bit a bit sin firmar)

En este artículo, el enfoque está en la función showbits() . Veamos cómo se relaciona con los operadores bit a bit.

showbits( ) Función

Esta función se ocupa principalmente de los conceptos de operadores bit a bit. Echemos un vistazo al siguiente programa en C para entender la función showbits().

C

// C program to demonstrate the
// showbits() function
#include <stdio.h>
void showbits (int n)
{
  int i, k, andmask;
 
  for (i = 15; i >= 0;i--)
  {
    andmask = 1 << i;
    k = n & andmask;
    k == 0 ? printf ("0") : printf ("1");
  }
}
 
// Driver code
int main()
{
  showbits(5);   
  return 0;
}
Producción

0000000000000101

Explicación

  1. Todo lo que se hace en esta función es usar un operador AND y una variable andmask. La variable andmask se utiliza para comprobar el estado de los bits individuales. Si el bit está desactivado, imprimimos un 0; de lo contrario, imprimimos un 1.
  2. La primera vez que se pasa por el ciclo, la variable y máscara contendrá el valor 1000000000000000, que se obtiene desplazando a la izquierda 1, quince lugares.
  3. Si el bit más significativo de la variable n es 0, entonces k contendría un valor 0, de lo contrario, contendría un valor distinto de cero.
  4. Si k contiene 0, printf() imprimirá 0; de lo contrario, imprimirá 1.
  5. En la segunda vuelta del bucle, el valor de i se reduce y, por tanto, el valor de andmask cambia, que ahora será 100000000000000. Esto comprueba si el siguiente bit más significativo es 1 o 0, y lo imprime en consecuencia. La misma operación se repite para todos los bits del número.

Si se requiere el binario de números decimales, entonces básicamente todos los números enteros están realmente en binario en la computadora. Es solo que se convierte en una string que es la representación decimal de ese valor cuando se imprime usando printf y «%d». Si se requiere el resultado en alguna otra base (p. ej., base 2 o binaria), proporcione la string de formato printf adecuada si existe (p. ej., «%x» para hexadecimal) o simplemente cree esa string e imprímala.

A continuación se muestra el código que puede construir la representación de string de un número entero en cualquier base en [2,36].

C

// C program to implement the
// above approach
#include <stdio.h>
#include <string.h>
 
char digits[] =
     "01234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ";
 
void reverse(char* start, char* end)
{
  for(end--; start < end; start++, end--)
  {
    char t = *start;
    *start = *end;
    *end = t;
  }
}
 
int base_change(int n,
                int base, char* buffer)
{
  int pos = 0;
   
  if (base > strlen(digits))
    return -1;
  while(n)   
  {
    buffer[pos] = digits[n % base];
    n /= base;
    pos++;
  }
   
  buffer[pos] = '\0';
  reverse(buffer, buffer + pos);
  return 0;
}
 
// Driver code
int main()
{
  char buffer[32];
  int conv = base_change(1024,
                         2, buffer);
  if (conv == 0)
    printf("%s\n", buffer);
  return 0;
}
Producción

10000000000

Explicación: La función base_change() muestra la representación binaria de cualquier valor de carácter o entero. Por ahora, es suficiente saber que la función base_change() muestra el equivalente binario del número entero.

Publicación traducida automáticamente

Artículo escrito por sambhav228 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *