Duvida Cruel

1. Duvida Cruel

Tarcisio Silva
TarcisioSilva

(usa Ubuntu)

Enviado em 30/05/2017 - 15:02h

Bom galera!

Tenho um Array formado a partir de um itoa() preciso fazer a soma de forma binaria com outro array itoa(), Ex: 0+0 = 0 , 0+1 = 0 e 1+1 = 1.

Alguem saberia uma forma, ja tentei converter de volta para int mas ai acabei fazendo o calculo de decimal com decimal e ficou errado


  


2. Re: Duvida Cruel

Paulo
paulo1205

(usa Ubuntu)

Enviado em 30/05/2017 - 17:35h

itoa() não é uma função padronizada, então tome cuidado ao usá-la.

Não entendi o que você quis dizer com um array formado a partir de um itoa(). Array de caracteres, mesmo? Você está operando a soma com strings ou com inteiros?

Será que usar strings é a melhor solução? O que o programa tem de fazer, e a partir de que entradas?


3. Re: Duvida Cruel

Tarcisio Silva
TarcisioSilva

(usa Ubuntu)

Enviado em 30/05/2017 - 17:50h

paulo1205 escreveu:

itoa() não é uma função padronizada, então tome cuidado ao usá-la.

Não entendi o que você quis dizer com um array formado a partir de um itoa(). Array de caracteres, mesmo? Você está operando a soma com strings ou com inteiros?

Será que usar strings é a melhor solução? O que o programa tem de fazer, e a partir de que entradas?



int ip1;
char primeiraParte[10];

printf("Escreva a primeira parte!\n");
scanf("%i",&ip1);
itoa(ip1,primeiraParte,2);

com o auxilio da variaval ip1 joguei a conversao binaria de um numero digitado pelo usuario num array formado pela função itoa, gostaria de saber se ha como extrair item por item desse array pois preciso fazer uma soma com outro array gerado da mesma forma



4. Re: Duvida Cruel

Tarcisio Silva
TarcisioSilva

(usa Ubuntu)

Enviado em 30/05/2017 - 17:54h

tenho que pegar um ip e uma mascara de rede fazer um AND com os octetos binarios para resultar num endereço ip.

logicamente sei como proceder nao estou sabendo utilizar a linguagem

entao dividi a captura em partes do ip, transformei em binario com o itoa agora precisaria transformar em int para efetuar a soma e assim gerar o binario da rede

segue o condigo que fiz ate agora, P.S. sou bem fraco em linguagem C
// bloco IP
int ip1, ip2,ip3,ip4;
char primeiraParte[10], segundaParte[10], terceiraParte[10], quartaParte[10];

// bloco mascara
int masc1, masc2,masc3,masc4;
char primeiraMasc[10], segundaMasc[10], terceiraMasc[10], quartaMasc[10];
printf("Escreva a primeira parte!\n");
scanf("%i",&ip1);
itoa(ip1,primeiraParte,2);
printf("Escreva a segunda parte!\n");
scanf("%i",&ip2);
itoa(ip2,segundaParte,2);
printf("Escreva a terceira parte!\n");
scanf("%i",&ip3);
itoa(ip3,terceiraParte,2);
printf("Escreva a quarta parte!\n");
scanf("%i",&ip4);
itoa(ip4,quartaParte,2);
// bloco mascara
printf("Escreva a primeira parte!\n");
scanf("%i",&masc1);
itoa(masc1,primeiraMasc,2);
printf("Escreva a segunda parte!\n");
scanf("%i",&masc2);
itoa(masc2,segundaMasc,2);
printf("Escreva a terceira parte!\n");
scanf("%i",&masc3);
itoa(masc3,terceiraMasc,2);
printf("Escreva a quarta parte!\n");
scanf("%i",&masc4);
itoa(masc4,quartaMasc,2);

Essa é a parte que estou tentando fazer os calculos
x = primeiraParte;
y= primeiraMasc;
z = primeiraParte+primeiraMasc;
printf("%s e masc %s e o resultado e %s",x,y,z);


//printf("%s, %s, %s, %s \n",primeiraParte,segundaParte,terceiraParte,quartaParte);
//printf("%s, %s, %s, %s ",primeiraMasc,segundaMasc,terceiraMasc,quartaMasc);


return 0;


5. Re: Duvida Cruel

Paulo
paulo1205

(usa Ubuntu)

Enviado em 30/05/2017 - 23:52h

Você não precisa converter nada. O C e o C++ têm operadores para E e OU bit-a-bit (& e |, respectivamente). Basta você os empregar diretamente com operandos inteiros.


6. Re: Duvida Cruel

Tarcisio Silva
TarcisioSilva

(usa Ubuntu)

Enviado em 31/05/2017 - 09:19h

paulo1205 escreveu:

Você não precisa converter nada. O C e o C++ têm operadores para E e OU bit-a-bit (& e |, respectivamente). Basta você os empregar diretamente com operandos inteiros.


Não conheço a linguagem , teria algum material que me indicasse um norte nesse caso?



8. Re: Duvida Cruel

Tarcisio Silva
TarcisioSilva

(usa Ubuntu)

Enviado em 31/05/2017 - 09:47h

Grato


9. Re: Duvida Cruel

Tarcisio Silva
TarcisioSilva

(usa Ubuntu)

Enviado em 31/05/2017 - 09:48h

agora que vi que é mais uma ironia, mas mesmo assim grato


10. Re: Duvida Cruel

Paulo
paulo1205

(usa Ubuntu)

Enviado em 31/05/2017 - 11:04h

Não é ironia nenhuma, muito menos “mais uma”.

O problema foi eu ter indicado o LMGTFY em lugar do Google diretamente? Bem... eu achei engraçado quando fizeram isso comigo (aliás, eu acho o site muito bem sacado).

Observe que eu já tinha dito a você como resolver o problema, e isso usando um recurso muito básico da linguagem (tão básico, na verdade, que corresponde diretamente a uma instrução da CPU). É de se supor que, se você tem de escrever um programa em C usando um recurso básico, você deveria ter tido acesso a essa informação em algum livro texto.

E justamente esse é o motivo de eu ter indicado a você que pesquisasse. Já não era mais uma dúvida sobre como fazer, mas sim sobre a forma. Isso vai estar em livros-textos ou em artigos on-line com formato de texto didático. Se eu fosse produzir um material com qualidade de texto didático, eu acabaria gastando muito tempo, e não teria, aqui neste fórum, os recursos necessários para que a apresentação ficasse legal.

Em todo caso, a intenção não foi ofender. Peço desculpas pelo incômodo provocado.


11. Re: Duvida Cruel

Tarcisio Silva
TarcisioSilva

(usa Ubuntu)

Enviado em 31/05/2017 - 11:10h

paulo1205 escreveu:

Não é ironia nenhuma, muito menos “mais uma”.

O problema foi eu ter indicado o LMGTFY em lugar do Google diretamente? Bem... eu achei engraçado quando fizeram isso comigo (aliás, eu acho o site muito bem sacado).

Observe que eu já tinha dito a você como resolver o problema, e isso usando um recurso muito básico da linguagem (tão básico, na verdade, que corresponde diretamente a uma instrução da CPU). É de se supor que, se você tem de escrever um programa em C usando um recurso básico, você deveria ter tido acesso a essa informação em algum livro texto.

E justamente esse é o motivo de eu ter indicado a você que pesquisasse. Já não era mais uma dúvida sobre como fazer, mas sim sobre a forma. Isso vai estar em livros-textos ou em artigos on-line com formato de texto didático. Se eu fosse produzir um material com qualidade de texto didático, eu acabaria gastando muito tempo, e não teria, aqui neste fórum, os recursos necessários para que a apresentação ficasse legal.

Em todo caso, a intenção não foi ofender. Peço desculpas pelo incômodo provocado.



Também achei muito bem sacado o a referencia mas preferiria um Google, e em relação a forma básica de resolver o problema , pode ser básico para quem ja tem um bom domínio da linguagem , no meu caso que estou iniciando agora, talvez não seja tão básico assim, mas de qualquer forma agradecido.



12. Re: Duvida Cruel

Enzo de Brito Ferber
EnzoFerber

(usa FreeBSD)

Enviado em 31/05/2017 - 15:10h



Santo cristo! Muito bem sacado mesmo!

*

Quanto a duvida:

Você não precisa converter os valores em string. A sua descrição de "0 + 0 = 0, 0 + 1 = 0 e 1 + 1 = 1" é que ficou errada. Você sabe alguma coisa de lógica? Em lógica, usamos o operador '+' para a operação OU, que tem a seguinte saída: "0 + 0 = 0, 0 + 1 = 1, 1 + 1 = 1". Que não é seu caso.

O que você quer é fazer um programa que pegue um IP de host e retorne o IP identificador da rede a qual ele pertence. Para isso, você deve fazer um AND entre o IP do host e a máscara de rede. Portanto, você poderia simplesmente ler os inteiros (como já está fazendo), e então fazer um AND com eles.


Host Network ID = Host_IP_Addr AND Network_Mask


Achou qual o operador AND bitwise do C?

Enzo Ferber
[]'s


$ indent -kr -i8 src.c

"(...)all right-thinking people know that (a) K&R are _right_ and (b) K&R are right."
- linux/Documentation/CodingStyle - TORVALDS, Linus.




01 02



Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts