经典ASP中的右移和左移运算符

问题描述 投票:1回答:1

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

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

请帮助我。

asp-classic operator-keyword
1个回答
0
投票

按位右移>>不等于简单除以\除以​​给定的数字,而是除以给定的次数除以整数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/

© www.soinside.com 2019 - 2024. All rights reserved.