我正在尝试实现一种现有的网络协议,该协议大量使用Java不支持的无符号数据类型。我目前的做法是为每种数据类型选择下一个更大的数据类型,以便无符号数字可以适应正数区间,然后使用字节移位来获得所需的效果。由于这种方法容易出错,并且对于无符号长整型及以上数据类型,我必须使用比扩展类型更重的BigInteger,我想知道是否有更好的方法来实现这个问题?
我正在尝试实现一种现有的网络协议,该协议大量使用Java不支持的无符号数据类型。我目前的做法是为每种数据类型选择下一个更大的数据类型,以便无符号数字可以适应正数区间,然后使用字节移位来获得所需的效果。由于这种方法容易出错,并且对于无符号长整型及以上数据类型,我必须使用比扩展类型更重的BigInteger,我想知道是否有更好的方法来实现这个问题?
long unsignedA =
long unsignedB =
boolean greater = unsignedA + Long.MIN_VALUE > unsignedB + Long.MIN_VALUE
编辑:为什么这个代码能够运行?部分原因是Java没有溢出/下溢异常。
例如:
byte unsignedA = 0;
unsignedA--;
// unsignedA == FF, is this -1 or 255? Java assumes the former but you assume the later
byte unsignedB = unsignedA * unsignedA;
// unsignedB is -1 * -1 = 1 or (byte) (255*255) = (byte) 65525 = 1.
>>>
进行无符号位移。 - Peter Lawrey