经典ASP

时间:2020-04-16 12:14:52

标签: asp-classic operator-keyword

如何在经典ASP中使用Right Shift运算符。如In ASP, Bit Operator Left shift and Right shift中的建议,我将“ \”用作右移运算符。它给我错误的结果。

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

请帮助我。

1 个答案:

答案 0 :(得分:1)

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

例如:5 >> 1 = 2

5       00000000000000000000000000000101 
5 >> 1  00000000000000000000000000000010 (2)

与5/2相同,

即在您的情况下,它不是33555758 \ 24,而是除以24的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/