Guia completo para trabalhar com bytes não assinados em Java:
(Fonte para esta resposta.)
A linguagem Java não fornece nada parecido com a unsigned
palavra - chave. A de byte
acordo com a especificação da linguagem representa um valor entre -128 - 127. Por exemplo, se a byte
for convertido para um int
Java, ele interpretará o primeiro bit como sinal e usará a extensão de sinal .
Dito isto, nada impede que você veja byte
apenas 8 bits e interprete esses bits como um valor entre 0 e 255. Lembre-se de que não há nada que você possa fazer para forçar sua interpretação sobre o método de outra pessoa. Se um método aceitar umbyte
, esse método aceita um valor entre -128 e 127, a menos que seja explicitamente indicado o contrário.
Aqui estão algumas conversões / manipulações úteis para sua conveniência:
Conversões de / para int
// From int to unsigned byte
int i = 200; // some value between 0 and 255
byte b = (byte) i; // 8 bits representing that value
// From unsigned byte to int
byte b = 123; // 8 bits representing a value between 0 and 255
int i = b & 0xFF; // an int representing the same value
(Ou, se você estiver no Java 8 ou superior, use Byte.toUnsignedInt
.)
Análise / formatação
A melhor maneira é usar as conversões acima:
// Parse an unsigned byte
byte b = (byte) Integer.parseInt("200");
// Print an unsigned byte
System.out.println("Value of my unsigned byte: " + (b & 0xFF));
Aritmética
A representação de 2 complementos "simplesmente funciona" para adição, subtração e multiplicação:
// two unsigned bytes
byte b1 = (byte) 200;
byte b2 = (byte) 15;
byte sum = (byte) (b1 + b2); // 215
byte diff = (byte) (b1 - b2); // 185
byte prod = (byte) (b2 * b2); // 225
A divisão requer conversão manual de operandos:
byte ratio = (byte) ((b1 & 0xFF) / (b2 & 0xFF));