如何在经典ASP中使用Right Shift运算符。如In ASP, Bit Operator Left shift and Right shift中的建议,我将“ \”用作右移运算符。它给我错误的结果。
例如在javascript中,33555758 >> 24给出结果2。但在经典ASP 33555758 \ 24中给出除法结果。
请帮助我。
按位右移>>
不等于简单除以\
除以给定的数字,而是除以给定的次数除以整数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/