如何在VBA中使用位移

时间:2017-10-24 19:54:08

标签: excel vba excel-vba

我正在尝试执行一些位移操作,以便在VBA代码中将0110 0100 0000转换为1100 1000。此示例的小数值为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

谢谢。

2 个答案:

答案 0 :(得分:7)

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

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

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

要在VBA中操作32位字,您不能使用Long类型,因为它的最高位(MSB,位31)保持符号(置位时为负)。试图用例如31位设置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

答案 1 :(得分:1)

尝试BITRSHIFT功能。 http://www.excelfunctions.net/excel-bitrshift-function.html。如果不可用,请改用乘法。