Ir para conteúdo
Fórum Script Brasil
  • 0

Operações Com Numeros Binarios Em C


Castro

Pergunta

:(

Considere o código abaixo:


int main()
{
  int binario =0000000000000010;
printf ("\n O valor da variavel (binario)         e   = %d\n\n", binario);

    system ("Pause");

return(0);
}

Como faço para mostrar um número binário em C ? sei que esse programa tem um erro. Números começados com 0, representam a base oito (octal), assim sendo como representar números na base dois em C ?

Link para o comentário
Compartilhar em outros sites

5 respostass a esta questão

Posts Recomendados

  • 0

Em C você pode atribuir valores inteiros decimais, octais ou hexadecimais. Para valores binários você só vai usar sua respectiva representaçãona saída ou na entrada (mas o valor em si vai ser um inteiro decimal). Para isso você pode usar a função itoa() para esse tipo de conversão:

int main()
{
    int valor = 2;
    char binario[8];
        
    printf("%i\n", valor);

    itoa(valor, binario, 2);
    printf("%s\n", binario);
}

Certo? ;)

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0
Mas se eu quiser usar operadores de bit ?

É normal, ou seja, com os operadores & e | atuando sobre dois inteiros. Exemplo:

#include <stdlib.h>
#include <stdio.h>

int main()
{
    int valor1 = 4;
    int valor2 = 5;
    char binario[8];
    
    printf("%i\n", valor1);
    itoa(valor1, binario, 2);
    printf("%s\n", binario);

    printf("%i\n", valor2);
    itoa(valor2, binario, 2);
    printf("%s\n", binario);

    itoa(valor1 & valor2, binario, 2);
    printf("AND = %s\n", binario);

    itoa(valor1 | valor2, binario, 2);
    printf("OR = %s\n", binario);
    
    system("pause");
}

não poderei trabalhar com string, terei que usar a representação inteira do número binario, e não somente 10, não fica estranho ? como fazer ?

Zeros à esquerda em binários, assim como com decimais, não tem nenhuma utilidade. Então, sendo apenas uma questão de estética, você pode simplesmente criar uma função que te retorne a string com zeros à esquerda.

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0

:)

Obtive esta informação:

| - ou inclusivo bit a bit - 001 | 011 = 011 - se qualquer um dos dois bits for 1 o resultado é 1, se os dois forem 0 o resultado é 0;

& - e lógico bit a bit - 001 | 011 = 001 - se os dois bits forem 1 o resultado é 1, se qualquer um dos bits for 0 o resultado é 1;

^ - ou exclusivo bit a bit - 001 | 011 = 010 - se um e apenas um dos dois bits for 1 o resultado é 1, se os dois forem 0 ou se os dois forem 1 o resultado é 0.

Pessoal !! Fiz o seguinte teste para tentar usar a explicação, mas....

...................
int valor1 = 4;
int valor2 = 5;
char binario4[20];
printf ("\nComparando os numeros 4 e 5\n");
    if (itoa(valor1 | valor2, binario4, 2))
       {
        printf ("\nResultado:Um dos bits e 1 (um)\n\n");
       }
   else 
        {
         printf ("\nResultado:Os dois bits são 0 (zero)\n\n");
        }
         
    system ("pause");
...................................

Resultado:

Comparando os numeros 4 e 5

Resultado:Um dos bits e 1 (um)

O fato é que não estou sabendo ativar o “else”, já mudei os valores 4 e 5 por outros, e o resultado é sempre o mesmo. Definitivamente, não estou sabendo interpretar o funcionamento do “ou” (|) e o “e” (&) de campo de bit . Poderia ajudar ?

Obrigado

Editado por Castro
Link para o comentário
Compartilhar em outros sites

  • 0

Primeiro você tem que entender Binário e como contar

no ex anterior

veja as colunas

8421-8421

^^^-^^^

0000-0100 =4

0000-0110 =5

usando OR "|" quer dizer: ou esse ou esse 1|1=1, 1|0=1, 0|1=1 0|0=0

0000-0110 =5

| - ou inclusivo bit a bit - 001 | 011 = 011 - se qualquer um dos dois bits for 1 o resultado é 1, se os dois forem 0 o resultado é 0;

0000-0100 =4

0000-0110 =5

usando AND "&" quer dizer: esse e esse 1&1=1, 1&0=0, 0&1=0 0&0=0

0000-0100 =4

& - e lógico bit a bit - 001 | 011 = 001 - se os dois bits forem 1 o resultado é 1, se qualquer um dos bits for 0 o resultado é 1;

0000-0100 =4

0000-0110 =5

usando XOR "^" quer dizer: se for diferente 1^1=0, 1^0=1, 0^1=1 0^0=0

0000-0010 =2

^ - ou exclusivo bit a bit - 001 | 011 = 010 - se um e apenas um dos dois bits for 1 o resultado é 1, se os dois forem 0 ou se os dois forem 1 o resultado é 0.

veja como contar em binário

eu aprendi assim:

esqueça a contagem decimal e pense sempre em Hexadecimal

observe as colunas de bits

8421-8421 | valor em hexa | valor decimal

0000-0000 | 0x00 | 0 (Casa da paridade =0)

0000-0001 | 0x01 | 1 somando 0+1=1 (preenche a casa da paridade e se torna impar)

0000-0010 | 0x02 | 2 somando 1+1=0 vai 1 (volta a ser par)

0000-0011 | 0x03 | 3 somando 0+1=1

0000-0100 | 0x04 | 4 somando 1+1=0 vai 1 +1=0 e vai 1 novamente

0000-0101 | 0x05 | 5 somando 0+1=1

0000-0110 | 0x06 | 6 somando 1+1=0 vai 1

0000-0111 | 0x07 | 7 somando 0+1=1 observe que 7= 1+2+4(Repare as colunas)

0000-1000 | 0x08 | 8

0000-1001 | 0x09 | 9 = 8+1

0000-1010 | 0x0A | 10 = 8+2

0000-1011 | 0x0B | 11 =8+2+1

0000-1100 | 0x0C | 12 =8+4

0000-1101 | 0x0D | 13 =8+4+1

0000-1110 | 0x0E | 14 =8+4+2

0000-1111 | 0x0F | 15 =8+4+2

0001-0000 | 0x10 | 16 0000 vai 1 estouro de carry para 8 bits

0001-0001 | 0x11 | 17 e assim por diante até completar os 8º bit

...

0111-1111 | 0x7F | 127 limite dos números positivos

1000-0000 | 0x80 | 128 ou -127 pois o ultimo bit pode ser considerado bit de sinal

1000-0010 | 0x82 | 129 ou -126 e assim por diante até completar os 8 bits

...

1111-1110 | 0xFE | 254 ou -2 =8+4+2+1=F=15 na segunda casa (15*16)=240 +8+4+2=254

obs 16=2^4=2*2*2*2(preenche as 4 primeiras casas) para os matemáticos

1111-1111 | 0xFF | 255 ou -1 =8+4+2+1=F=15 na segunda casa (15*16)=240 +8+4+2+1=254

espero que seja útil

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...