如何在VBA中使用位移

我正在尝试执行一些位移操作,以便在VBA代码中将0110 0100 0000转换为1100 1000 。 这个例子是一个十进制值200。

我已经尝试了下面的代码,但它似乎是>>不工作。 另外,如何将数据types设置为零来清除所有位?

如果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 

谢谢。

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

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

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

要在VBA中操作32位字,不能使用Longtypes,因为它的最高有效位(MSB,位31)持有符号(设置为负数)。 试图用例如myLong = 2 ^ 31设置第31位将导致溢出。 您可以使用Doubletypes作为替身双字。

 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 

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