在Java中,如何模拟"converting negative numbers casted by unsigned char in c"?



例如,在c中,将-1234转换为unsigned char将变成46:

int main(){
    int a=-1234;
    unsigned char b=a;
    printf("%dn",b);
    return 0;
};

我想把代码转换成java版本,现在的代码是:

public class Test{
    public static void main(String[] args){
        int a=-1234;
        int b=(a%(Byte.MAX_VALUE-Byte.MIN_VALUE+1))+(a<0?(Byte.MAX_VALUE-Byte.MIN_VALUE+1):0);
        System.out.println(b);
    }
}

是否有更快(或更简单)的方法来做到这一点(例如:按位操作)?

int a = -1234;
a = (byte) a & 0xFF;
System.out.println(a); 
//Output: 46

这不是模拟,这叫做铸造。

char a = (char)-1234;
byte b = (byte)-1234;
int unsigned = b>=0?b:128 - b;
System.out.println((int)a + ", " + Byte.toUnsignedInt(b) + ", " + unsigned);
//output
//64302, 46, 46
int a = -1234;
    byte b = a < 0 ? (byte) -((byte) ((a ^ 0xFFFFFFFF) + 1)) : (byte)a;
    System.out.println(b);

最新更新