在C++
代码中,我有unsigned char
,如果将255(0xff)值乘以0.5,我将得到127。但是在我的Java代码中,我不能这样做,因为{ {1}}已签名。
代码示例:
byte
结果将是
byte a = (byte) 0xFF;
System.out.println(String.format("0x%02X ", a));
float b = 0.5;
float c = a * b;
System.out.println(String.format("0x%02X ", c));
有没有相乘的方法,所以我得到 7f 或在0xff
0x00
127 中并将该值存储回int
类型的变量中?
答案 0 :(得分:2)
byte
类型在Java中签名。因此,字节0xFF
表示-1而不是+255。因此-1的一半是-0.5 ...,当您转换回一个字节时,将是-1或0 ...,具体取决于舍入。
您可能应该执行以下操作:
byte a = (byte) 0xFF;
float c = Byte.toUnsignedInt(a) * 0.5f;
byte d = (byte) c;
或者,您可以使用整数除法:
byte a = (byte) 0xFF;
int c = Byte.toUnsignedInt(a) / 2;
byte d = (byte) c;
...尽管它将截断为零(这些数字为正数),而不是四舍五入。