Carregar um valor binário extenso em uma variável

11 respostas
java
J

Ola Pessoal,

Como poderia carregar um valor extenso em uma variável como o exemplo abaixo sem dar erro ao compilar.

byte x = 1111001100100110100111101101000001101001110010011110110001011101001100101111001111101001011011100001110001010110111010001101001110010011001011110010100010111110111100101111110010011010011110110111110100000100000100000;

11 Respostas

rmendes08

byte x = (byte) 0b1101101;

coloca o 0B ou 0b na frente e faz o casting;

J

fiz o teste e continua o msm problema

byte b = (byte)
0b1111001100100110100111101101000001101001110010011110110001011101001100101111001111101001011011100001110001010110111010001101001110010011001011110010100010111110111100101111110010011010011110110111110100000100000100000

rmendes08

e qual é o erro ?

rmendes08

tem um detalhe, esse recurso só é válido a partir da versão 1.7 do Java.

Christian_Sticchi

Você quer armazenar esse valor ou mostra-lo na tela? Para isso, use um BigDecimal.

J

Armazenar o valor na variável

J

o BigDecimal não suporta o tamanho dos valores binários

J

Segue o erro referente.

rmendes08

Isso acontece por causa do tamanho do número. Número inteiros (int) suportam até 32 bits, e inteiros longos (long) até 64. Pelo jeito, esse seu número tem umas 200 posições, e portanto, ele extrapola o valor máximo que pode ser expresso através dos tipos inteiros do Java.

Mas enfim, qual é o seu problema real ? Por que você precisa guardar uma cadeia de bits desse tamanho ?

J

Precisaria comparar diversos binários provavelmente teria que carrega-los em um array futuramente, mais como tem essa questão do limite de caracteres, fico no dúvida de como resolver essa questão.

rmendes08

Minha sugestão é você escrever uma classe BigBinary, semelhante ao BigInteger que aceite somente os dígitos 0 e 1. Você pode receber um String com o número binário e armazená-lo em um array de bytes:

class BigBinary{
    private final byte[] internal;

    public BigBinary(String b){
        internal = new byte[b.length()];

        for(int i = 0 ; b.length() ; i++){
            internal[i] = Byte.valueOf(b.substring(i,i+1));
        }
    }

    private BigBinary(byte[] b){
        internal = b;
    }

    public BigBinary and(BigBinary b){
        byte [] result = new byte[internal.lenght];

        for(int i = 0 ; result.length ; i++)
            result[i] = this.internal[i] & b.internal[i];

        return new BigBinary(result);
    }
}

é claro que essa classe pode otimizar o armazenamento, verificar argumentos e tal, mas o que vale é a idéia …

Criado 27 de janeiro de 2016
Ultima resposta 28 de jan. de 2016
Respostas 11
Participantes 3