我是字节和字节的新手,我的数学也不是很好。我有点理解按位运算符,但是我不知道如何用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,因此向右添加三个零(向左移动3次)将得出111101000,即488。



要应用于给定数字(Adr_MSB & 0x3F) << (8 + Adr_LSB)的表达式x的有效逆


x取前六位并将其转换为int。这将是Adr_MSB
计算其余的位。从该计数中减去8,它将为Adr_LSB

10-07 15:49