如何在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位字,不能使用Long
types,因为它的最高有效位(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 。 如果不可用,请使用乘法。