2

谁能解释一下下面发生了什么;下面的位移是如何工作的?

Dim pBuffer(11) As Int 
                pBuffer(0)=4 
                'Firmware Version'
                pBuffer(1)=Bit.ShiftRight(Bit.And(firmware_version, 0xFF00),8)
                pBuffer(2)=Bit.And(firmware_version, 0xFF)

考虑firmware_version = 0001

等效的Java代码是什么?我可以在 Java 中使用 Bit.ShiftRight 吗?我检查了 Java 类,但不太明白 java 中等效的“Bit.ShiftRight”操作是什么?

编辑:你能解释一下这里到底发生了什么吗?

pBuffer(1)=Bit.ShiftRight(Bit.And(firmware_version, 0xFF00),8)

AND 是如何执行和位移的?它是在什么上执行的?是firmware_version AND 0xFF00 还是先移位?你能解释一下吗?

4

2 回答 2

5

在 java 中,您可以使用运算符>>>>>分别进行有符号和零填充的右移。

按位和在 Java 中由&.

请参阅http://docs.oracle.com/javase/tutorial/java/nutsandbolts/op3.html

VB 声明

pBuffer(1)=Bit.ShiftRight(Bit.And(firmware_version, 0xFF00),8)

因此可以通过在Java中实现

pBuffer[1]= (firmware_version & 0xFF00) // Bit.And
            >> 8                        // shift right 8 bits
于 2012-12-16T12:15:36.093 回答
2

VB.NET:Bit.ShiftRight(Bit.And(firmware_version, 0xFF00),8)

(firmware_version 和 0xFF00 的按位与右移 8 次)

Java  : (firmware_version & 0xFF00) >> 8 //or >>> for unsigned right-shift

VB.NET:Bit.And(firmware_version, 0xFF)

固件版本与 0xFF 的按位与

Java  : (firmware_version & 0xFF)

Java 中的&运算符执行按位与运算。

参考

于 2012-12-16T12:20:36.473 回答