Guía completa para trabajar con bytes sin firmar en Java:
(Fuente de esta respuesta).
El lenguaje Java no proporciona nada parecido a la unsigned
palabra clave. A de byte
acuerdo con la especificación del lenguaje representa un valor entre −128 y 127. Por ejemplo, si byte
se emite a int
Java interpretará el primer bit como signo y usará la extensión de signo .
Dicho esto, nada le impide ver byte
simplemente 8 bits e interpretar esos bits como un valor entre 0 y 255. Solo tenga en cuenta que no hay nada que pueda hacer para forzar su interpretación sobre el método de otra persona. Si un método acepta a byte
, entonces ese método acepta un valor entre -128 y 127 a menos que se indique explícitamente lo contrario.
Aquí hay un par de conversiones / manipulaciones útiles para su conveniencia:
Conversiones a / desde 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
(O, si tienes Java 8+, úsalo Byte.toUnsignedInt
).
Análisis / formateo
La mejor manera es usar las conversiones anteriores:
// 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
La representación de 2 complementos "simplemente funciona" para sumar, restar y multiplicar:
// 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
La división requiere la conversión manual de operandos:
byte ratio = (byte) ((b1 & 0xFF) / (b2 & 0xFF));