在Java中,如何模拟"converting negative numbers casted by unsigned char in c"?
In Java,how to simulate "converting negative numbers casted by unsigned char in c"?
例如,在 c 中,将 -1234 转换为 unsigned char 将变为 46:
int main(){
int a=-1234;
unsigned char b=a;
printf("%d\n",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;
byte b = a < 0 ? (byte) -((byte) ((a ^ 0xFFFFFFFF) + 1)) : (byte)a;
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
例如,在 c 中,将 -1234 转换为 unsigned char 将变为 46:
int main(){
int a=-1234;
unsigned char b=a;
printf("%d\n",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;
byte b = a < 0 ? (byte) -((byte) ((a ^ 0xFFFFFFFF) + 1)) : (byte)a;
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