如何在VBA中使用位移

Jes*_*sus 4 excel vba excel-vba

我正在尝试执行一些位移操作以转换0110 0100 00001100 1000VBA代码.此示例的小数值为200.

我尝试了以下代码,但似乎>>无法正常工作.另外,如何将数据类型设置为零以清​​除所有位?

如果wordmsg是32位字,如何将第30位和第31位设置为1?

Sub test()

'Declaring variables
Dim simvalue As Integer, wordmsg As Integer, test As Integer, resolution As Integer

simvalue= 200
resolution = 0.0625

wordmsg = simvalue / resolution
test = wordmsg >> 3

End sub
Run Code Online (Sandbox Code Playgroud)

谢谢.

Exc*_*rus 7

VBA中没有位移操作符.一般来说,你可以通过乘法,除法,和和你的方式.

Excel通过Application.WorksheetFunction将BITRSHIFT,BITLSHIFT,BITAND,BITOR和BITXOR函数公开给VBA.

示例:test = Application.WorksheetFunction.Bitrshift(wordmsg, 3).

要在VBA中操作32位字,您不能使用该Long类型,因为其最高有效位(MSB,位31)保持符号(置位时为负).尝试将bit 31设置为eg myLong = 2 ^ 31会导致溢出.您可以使用Double类型作为替代双字.

Sub BitRightShiftTest()
    Dim d As Double

    d = (2 ^ 31) + (2 ^ 30) + (200 / 0.0625)
    Debug.Print d

    d = Application.WorksheetFunction.Bitrshift(d, 3)
    Debug.Print d
End Sub
Run Code Online (Sandbox Code Playgroud)