• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Furriel

Operação lógica em Java

38 mensagens neste tópico

Olá a todos,

Tenho duas strings de números binários de 8 bits e quero fazer num1 AND num2.

Estou a passar as variáveis para inteiras e depois faço a=num1 & num2;

Mas não me está a dar, qual será o erro?

Obrigado.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Já experimentei com && e também não deu. Diz que o operador não pode ser aplicado a String, String ou int, int.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

o and é representado por dois &&

Isso não tem nada a ver. O && é usado para condições, o que o Furriel quer é uma operação lógica com dois números binários. Por acaso em C nunca fiz isso, não faço a mínima como se faz...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Pois o que eu quero é algo do género:

01001010

AND

11111111

=

01001010

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

ah, tu queres e somar os valores_

Não tem nada a ver. Fazer o AND é uma operação lógica entre números binários.

1 AND 0 = 0

1 AND 1 = 1

0 AND 0 = 0

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

ah, tu queres e somar os valores_

Não, isto não é somar...

Somar seria:

01001010

+

11111111

=

101001001       

Como podes ver é um pouco diferente.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Primeiro tu tens os valores em caracteres, nunca os podes somar sem antes converter e como o java te disse e muito bem, não podes aplicar esse operador lógico a String. Não faz sentido.

Se eu pegar nas tuas duas Strings  e aplicar o "AND" o que estou a fazer é agarrar nos bits que representam a tua String e soma-los, isto de forma simples:

String zero = "0";

String um = "1";

String andLogico = zero & um;

O que as linhas acima fazem é pegar no valor binário do caracter "0", que em ASCII é 48 ou 110000 em binário, e agarrar no valor binário de "1", que é qualquer coisa como 110001, e fazer um AND lógico, não é o mesmo que fazer um AND à sua representação, o  "0" e "1" que as Strings representam. Isto não se pode fazer, nem faz muito sentido, pelo menos em java desta forma não é possível.

Posso ter percebido mal o que queres fazer mas do que percebi não estás a tentar fazer as coisas correctas. Porque é que tens a representação do binário em String?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Um "AND" é uma soma lógica, logo sim, é somar, mas um somar diferentes dos números decimais :thumbsup:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O "AND" é uma operação lógica que só pode ser aplicada a binários. Se o aplicares a números inteiros, por exemplo, o java aplica a operação à sua representação binária. Mas isso nas Strings não faz sentido.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Podem me explicar em que casos é que isto tem utilidade ?

Tudo o que envolva electrónica... Circuitos lógicos, portas lógicas...

Também há o OR, XOR, NOR, ....

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O "AND" é uma operação lógica que só pode ser aplicada a binários. Se o aplicares a números inteiros, por exemplo, o java aplica a operação à sua representação binária. Mas isso nas Strings não faz sentido.

Pois, tens razão, vou definir as variáveis como binários.

Já agora sabes qual é o tipo de uma variável Binária?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Podem me explicar em que casos é que isto tem utilidade ?

Tudo o que envolva electrónica... Circuitos lógicos, portas lógicas...

Também há o OR, XOR, NOR, ....

No meu caso tenho que fazer um trabalho para a faculdade sobre IP´s e tenho que, dado um IP e uma Máscara, determinar a rede, subrede, host.

Para isso preciso de trabalhar com os binários.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

No meu caso tenho que fazer um trabalho para a faculdade sobre IP´s e tenho que, dado um IP e uma Máscara, determinar a rede, subrede, host.

Para isso preciso de trabalhar com os binários.

Eu lembro-me dessa cena, o ano passado também dei isso. É um pouco confuso, mas é fácil...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Pois mas eu não conheço linguagem alguma com um tipo de dados binário, sorry, simplesmente nunca usei, o Java não tem, outra linguagem não sei...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Pois mas eu não conheço linguagem alguma com um tipo de dados binário, sorry, simplesmente nunca usei, o Java não tem, outra linguagem não sei...

Eu o ano passado fiz uma coisa parecida em Assembly.

Mas para que queres um programa disso Furriel? Esses cálculos são fáceis de fazer...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu o ano passado fiz uma coisa parecida em Assembly.

Mas para que queres um programa disso Furriel? Esses cálculos são fáceis de fazer...

Eu tenho que determinar a rede do IP com a Máscara introduzida e para isso passei o IP e a Máscara para Binário e agora é só fazer a "soma" lógica dos dois valores.

Pelo menos foi a forma mais simples que arranjei, mas se conseguiste fazer de outra maneira partilha ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Pois o problema é que não passaste para binário mas sim para String o que não é bem a mesma coisa....

Podes simplesmente comparar bit a bit os octectos, tipo se tiveres o IP: 192.168.234.23 com a MASK: 255.255.255.0 basta que verifiques 192 & 255; 168 & 255; 234 & 255; 23 & 0. Não precisas de ter em String, não podes ter em String aliás.

Penso que assim funciona, mas estou a fazer de cabeça e já não tenho redes à 3 anos... mas a ideia é mesmo fazeres comparação lógica dos octetos.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Comparar bit a bit está fora de questão, ia ficar um código muito extensivo para o que é.

Vou tentar então fazer em decimal. Mas tens a certeza que o AND funciona com decimal? Pensava que era só com binário.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Quando digo 'bit a bit' refiro-me ao operador '&', por exemplo. É assim que se chama o operador, 'e bit a bit', porque internamente a operação é aplicada a todos os bits que representam o valor.

Exemplo de 'e' normal:

int x = 0;

int y = 0;

if(x == 0 && y == 0)

  ;

Exemplo de 'e bit a bit'

int x = 5;

int y = 1;

int resultado = x & y;

O operador '&' é um operador 'bit a bit', tal como é o '|' ou o '<', etc. Confuso? ;)

Sim funciona para qualquer número porque o que a linguagem faz é aplicar ao valor binário que representa o número, só não funciona para Strings ;).

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Pois, já percebi o que querias dizer ;)

De qualquer forma já tinha verificado na máquina de calcular do windows que dá para fazer a operação AND com decimais ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora