有没有一种方法可以将Java中的字节类型和浮点类型值相乘?

时间:2020-09-17 00:09:27

标签: java byte multiplication

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类型的变量中?

1 个答案:

答案 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;

...尽管它将截断为零(这些数字为正数),而不是四舍五入。

相关问题