Ola Pessoal gostaria que alguem me ajudasse , Tenho uma String em hexadecimal cujo valor é 0xFC000000 tenho que pegar essa instrução e pegar os 6 bits mais significativos Ou seja tenho que transforma em int com o metodo Integer.parseInt(“0xFC000000”,16) e depois pegar 6 bits mais percebi que o int do java não esta aceitando esse valor e gostaria de saber se alguem sabe como fazer isso .
Fala alkxyly!
Seguinte, o problema ai é que o valor do seu inteiro ultrapassa o range do int. Dá uma olhada nesse link aqui que vai te ajudar a entender o porque do seu problema xD
http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html
Abraço
parseInt não aceita o “0x”, você precisa podar o “0x” do começo.
Só que parseInt também não vai aceitar números que sejam maiores que 7FFFFFFF - e isso é um pouco chato de encarar.
Isto aqui deve funcionar, mas tome um pouco de cuidado para interpretar o resultado:
class TesteHex {
public static void main (String[] args) {
long y = Long.parseLong ("BE123456", 16);
int x = (int) y;
System.out.printf ("Imprimindo o numero 0xBE123456%n");
System.out.printf ("Hexadecimal: %08X%n", x);
System.out.printf (" Decimal: %d%n", x);
System.out.printf (" Binario: %s%n", Integer.toBinaryString (x));
System.out.printf ("Agora pegando os 6 bits mais significativos...%n");
x = x & 0xFC000000; // pegar os 6 bits mais significativos
System.out.printf ("Hexadecimal: %08X%n", x);
System.out.printf (" Binario: %s%n", Integer.toBinaryString (x));
}
}
Com o Long.parsLong resolveu em partes o resultado dos 6 primeiros bits ta dando negativo , como faço pra obter o valor exato dessa instrunção?
Mas vai dar negativo mesmo, oras bolas. Eu não disse que você tem de interpretar corretamente o resultado?
Você quer a explicação completa?
Em Java, diferentemente do C#, não existe um tipo de dados chamado “unsigned int” ou “unsigned char” ou “unsigned long” ou “unsigned short”, que é o que provavelmente você precisaria para não se confundir com o que é impresso ou o que aparece.
Todos os inteiros do Java (exceto o tipo char, que tecnicamente seria um “unsigned short” do C) têm sinal.
Um inteiro no Java que tenha o bit mais significativo igual a 1 é sempre negativo.
É por isso que o Java tem um método chamado “toHexadecimalString” e “toBinaryString” que imprime um número “negativo” (ou seja, com o bit mais significativo = 1) como se fosse um número “unsigned” (sem sinal).
Se você quiser reescrever o seu simulador de processador em C#, não vai se confundir com esses detalhes - porque essa linguagem tem “uchar”, “ushort”, “uint” e “ulong” (todos os tipos unsigned).