Publi

Asignar valores a variables enteras en binario

Hace unos meses, un alumno a quien le di clases particulares de C me preguntaba acerca de la asignación de valores en binario; y me decía que tanto si asignaba un valor en binario, como en hexadecimal, octal, etc; al ver su valor siempre era en decimal (printf(«%d»,valor);)

Las variables numéricas simplemente almacenan el número, que en definitiva, en memoria será un chorro de ceros y unos, y es a la hora de mostrarlo en pantalla como tenemos que decirle al sistema cómo lo muestra.

En C, se permite la introducción de datos en octal, decimal y hexadecimal (el binario no se usa mucho, además su transformación desde y hacia hexadecimal es casi inmediata).

En este código tenemos ejemplos para introducir datos en octal y hexadecimal:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <stdio.h>

int main()
{
int numero;
numero=021;         /* Introducimos número en octal */
printf("Numero en decimal: %d\n",numero);
printf("Numero en octal: %o\n",numero);
printf("Numero en hexa: %X\n",numero);
printf("\n\n");
numero=0x28b;           /* Introducimos número en hexa */
printf("Numero en decimal: %d\n",numero);
printf("Numero en octal: %o\n",numero);
printf("Numero en hexa: %X\n",numero);
}

Pero no disponemos de nada para binario, y a lo mejor alguna vez nos es útil, imaginémonos que estamos haciendo un programa para un microcontrolador y tenemos que reducir el uso de memoria por ejemplo, o hacer un envío de datos por un bus con un protocolo determinado; y aunque sea fácil definir los datos en hexadecimal, a veces para una prueba y con prisas no queremos perder tiempo haciendo cálculos.

Aquí muestro un programa (necesita de la función decToBin) que genera una serie de defines con valores binarios de un número de bits especificado. Todo ello lo almacena en un archivo de cabecera (.h) para incluirlo en nuestros proyectos.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#include <stdio.h>
#include <stdlib.h>

#define numbits 16

int *decToBin(int decimal, int nBits, int binary[]);  // No incluida en el ejemplo
void bin2file(FILE *f, int num);

int main()
{
int numero;
FILE *f;
int maxn=pow(2,numbits);

f=fopen("binarios.h", "w+");
if (f)
{
  for (numero=0; numero
  bin2file(f, numero);
}
else
  printf("No puedo abrir el archivo!!");
return 0;
}

void bin2file(FILE *f, int num)
{
int binary[numbits];
int i;

decToBin(num, numbits, binary);
fputs("#define b", f);
for (i=0; i<numbits; i++)
  fprintf(f, "%d", binary[i]);

fprintf(f, " %d\n", num);
}

También podría interesarte....

Leave a Reply