Java语言不提供任何类似unsigned
关键字的内容。一个byte
根据语言规范代表-128之间的值- 127。举例来说,如果byte
被强制转换为int
Java将解释第一位为标志和使用符号扩展。
就是说,没有什么可以阻止您byte
仅将8位查看并将这些位解释为0到255之间的值。请记住,您无能为力,无法将解释强加于其他人的方法。如果方法接受a byte
,则该方法接受-128到127之间的值,除非另有明确说明。
为了方便起见,以下是一些有用的转换/操作:
往返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
(或者,如果您使用的是Java 8+,请使用Byte.toUnsignedInt
。)
解析/格式化
最好的方法是使用上述转换:
// Parse an unsigned byte
byte b = (byte) Integer.parseInt("200");
// Print an unsigned byte
System.out.println("Value of my unsigned byte: " + (b & 0xFF));
算术运算
2补码表示对加,减和乘运算“有效”:
// 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
除法要求手动转换操作数:
byte ratio = (byte) ((b1 & 0xFF) / (b2 & 0xFF));