我不熟悉字节和位,而且我的数学也不是很好。我有点了解按位运算符,但我不知道如何用 2 个变量求解数学方程式/公式。我不确定这是问这个问题的合适地方,但无论如何。
我有这样一个公式:
(Adr_MSB & 0x3F) << (8 + Adr_LSB)
现在我想要的是我会得到一个整数(例如 33)并且代码会将其转换为 Adr_MSB 和 Adr_LSB(它们是字节)。 它应该工作到 128(好吧,我猜它会是 127)。
我知道这个问题可能听起来很愚蠢之类的,但我只是没有足够的数学知识来解决这个问题。
感谢所有帮助。
编辑:通过实验我发现,Adr_MSB 是一个乘数(例如,如果它是 10,则结果比它是 1 时大 10 倍)。
最佳答案
据我了解
(Adr_MSB & 0x3F)
的一部分采用了Adr_MSB
的最后六位并返回相应的整数。- 例如:125 (1111101) 将返回 61 (111101)
- 注意:此步骤将删除除最后 6 位以外的所有位,这些位将丢失。因此无损反函数是不可能的。
(8 + Adr_LSB)
只需将 8 添加到Adr_LSB
.-
<<
是有点聪明的左移运算符。- 例如。
61 << 3 = 488
.由于 61 是 111101,向右添加三个零(左移三次)将得到 111101000,即 488。
- 例如。
表达式的有效逆 (Adr_MSB & 0x3F) << (8 + Adr_LSB)
应用于给定号码 x
- 从
x
中取出前六位并将其转换为 int。这将是Adr_MSB
. - 计算剩余的位。从这个计数中减去 8,它将是
Adr_LSB
.
关于java - 困难的公式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32054713/