Título: Imprimindo em Binário
Linguagem: C/C++
S.O.: DOS / Windows
Autor(es): Wenderson Teixeira
Você já quis imprimir números no formato binário em C?
Então já deve ter percebido que, apesar de ter formatação para Hex e Octal, não há para Binário, uma solução simples seria utilizar a função itoa
do compilador Borland, passando como parâmetros o número a ser convertido, a string de saída e 2 como a base, o problema é que isto pode não ficar muito claro, a solução então pode ser criar uma macro ou função que encapsula esta transformação, mas o pior mesmo é que itoa
não faz parte do padrão ANSI C e muitos compiladores não a implementam, assim, para solucionar este problema, vamos implementar uma função que converte um número inteiro em uma string no formato binário, pronto para impressão, e aproveitando o embalo, vamos fazer também, uma rotina que faz o contrário, ou seja, converte uma string em formato binário de volta para um inteiro.
#include <stdio.h> #include <string.h> #include <math.h> #include <conio.h> #include <stdlib.h> #include <ctype.h> #if (__BORLANDC__ <= 0x460) || !defined(__cplusplus) typedef enum { false, true } bool; #endif /* IntToBinStr *************************************************************/ /* Descricao: */ /* Funcao que converte um número p/ uma string no formato binario */ /* */ /* Entrada: */ /* char *str - String que ira receber o numero convertido */ /* int Num - Numero a ser convertido */ /* */ /* Retorno: */ /* Retorna str */ /***************************************************************************/ char *IntToBinStr(char *str, int Num) { unsigned int n = (unsigned int)Num; int c; bool bAppend = false; if(!Num) { strcpy(str, "0"); return str; } str[0] = '\0'; for(c = 0; c < (sizeof(int) * 8); c++) { strcat(str, (n & 0x8000) ? (bAppend = true, "1") : (bAppend ? "0" : "")); n <<= 1; } return str; } /* BinStrToInt *************************************************************/ /* Descricao: */ /* Funcao que converte uma string no formato binario p/ um número */ /* */ /* Entrada: */ /* char *str - String que sera convertida */ /* */ /* Retorno: */ /* Retorna o número convertido */ /***************************************************************************/ int BinStrToInt(char *str) { int c, n; for(c = n = 0; c < strlen(str); c++) { n <<= 1; n |= str[c] == '1' ? 1 : 0; } return n; } void main() { char strBin[sizeof(int) * 8 + 1]; int c; printf("--------------------------\n" "| Hex | Oct | Bin | Dec |\n" "--------------------------\n"); for(c = 0; c < 16; c++) { printf("| %02X ", c); printf("| %2o ", c); printf("| %4s ", IntToBinStr(strBin, c)); printf("| %2d |\n", BinStrToInt(strBin)); } printf("--------------------------\n"); }