java - 困难的公式

标签 java math bit bitwise-operators

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

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

关于java - 困难的公式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32054713/

相关文章:

algorithm - 为什么ed ≡ 1 (mod φ(n)) 可以转化为ed - 1 = kφ(n)?

c++ - C++ 中的位缓冲区

c# - 如何从 ABBBBBGG GGGRRRRR 两个字节格式中读取颜色分量?

java - 如何使用泛型获取集合的内容?

java - 为什么我收到 Maven 错误 : "Unable to determine if resource X exists in http://maven.glassfish.org/content/groups/glassfish"?

java - Java 如何处理泛型的模糊类型推断?

c - C中打印位的格式

Java方法构造重复结构且变化较小

ios - Swift 中 Double 的拆分和组合

javascript - 为什么我不能让 JavaScript 工作的大数字库?