我正在尝试执行一些位移操作,以便在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
谢谢。
答案 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。如果不可用,请改用乘法。