Java 如何修改此小endian方法以使其赢得';t返回一个负整数? publicstaticintliendval(字节[]mem){ 返回(mem[0]&0xFF) |((mem[1]&0xFF)

Java 如何修改此小endian方法以使其赢得';t返回一个负整数? publicstaticintliendval(字节[]mem){ 返回(mem[0]&0xFF) |((mem[1]&0xFF),java,Java,当mem[3]>0x7F时,返回的int将为负值,因为int的最大值为0x7FFFFFFF。如果想要正返回值,请返回long public static int liEndVal (Byte[] mem) { return (mem[0] & 0xFF) | ((mem[1] & 0xFF) << 8) | ((mem[2] & 0xFF) << 16) | ((mem[3] & 0xFF) << 24); } pub

mem[3]
>0x7F时,返回的
int
将为负值,因为
int
的最大值为
0x7FFFFFFF
。如果想要正返回值,请返回
long

public static int liEndVal (Byte[] mem) {
    return (mem[0] & 0xFF)
| ((mem[1] & 0xFF) << 8)
| ((mem[2] & 0xFF) << 16)
| ((mem[3] & 0xFF) << 24);
}
publicstaticlongliendval(字节[]mem){
返回(mem[0]&0xFF)

|((mem[1]&0xFF),因为在该表示中,(签名)整数是负数。看起来你需要一个
无符号int
我想这里的答案可能实际上是你不应该介意答案是负数:只要把它当作无符号,输出的符号性就不重要了。你不能消除负输出的可能性,但我认为你是对的ng这很重要。

我不允许修改主功能though@Tree如果不允许修改该方法,这可能意味着可以使用负返回值。
public static long liEndVal (Byte[] mem) {
    return (mem[0] & 0xFF)
    | ((mem[1] & 0xFF) << 8)
    | ((mem[2] & 0xFF) << 16)
    | (((long)mem[3] & 0xFF) << 24);
}