Jes*_*sus 4 excel vba excel-vba
我正在尝试执行一些位移操作以转换0110 0100 0000为1100 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
谢谢.
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
| 归档时间: | 
 | 
| 查看次数: | 4796 次 | 
| 最近记录: |