我是字节和字节的新手,我的数学也不是很好。我有点理解按位运算符,但是我不知道如何用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
。