例如,在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);