首页 > 解决方案 > 经典 ASP 中的右移和左移运算符

问题描述

如何在经典 ASP 中使用右移运算符。正如 在 ASP、位运算符左移和右移中所建议的那样,我使用“\”作为右移运算符。它给了我错误的结果。

例如在 javascript 中,33555758 >> 24 给出结果 2。但在 Classic ASP 中,33555758 \ 24 给出除法结果。

请帮助我。

标签: asp-classicoperator-keyword

解决方案


按位右移>>不等于简单除以\给定数字,而是除以给定次数除以整数 2,即二进制 10。位移位将一组位中的每个数字向右移动。即除以二进制 10 会从数字中删除一个二进制数字并将数字右移。

示例:5 >> 1 = 2

5       00000000000000000000000000000101 
5 >> 1  00000000000000000000000000000010 (2)

与 5 / 2 相同,

即在你的情况下,它不会是33555758 \ 2424 次除以 2。由于 vbscript 中没有直接方法,因此可以这样做

Function SignedRightShift(pValue, pShift)

Dim NewValue, PrevValue, i
PrevValue = pValue
For i = 1 to pShift
    Select Case VarType(pValue)
        Case vbLong
            NewValue = Int((PrevValue And "&H7FFFFFFF") / 2)
            If PrevValue And "&H80000000" Then NewValue = NewValue Or "&HC0000000"
            NewValue = CLng(NewValue)
        Case vbInteger
            NewValue = Int((PrevValue And "&H7FFF") / 2)
            If PrevValue And "&H8000" Then NewValue = NewValue Or "&HC000"
            NewValue = CInt("&H"+ Hex(NewValue))
        Case vbByte
            NewValue = Int(PrevValue / 2)
            If PrevValue And "&H80" Then NewValue = NewValue Or "&HC0"
            NewValue = CByte(NewValue)
        Case Else: Err.Raise 13 ' Not a supported type
    End Select
    PrevValue = NewValue
Next
SignedRightShift = PrevValue

End Function

并用作

x = SignedRightShift(33555758, 24)

有关更多信息,请参阅http://chris.wastedhalo.com/2014/05/more-binarybitwise-functions-for-vbscript/


推荐阅读