如何在经典ASP中使用Right Shift运算符。如In ASP, Bit Operator Left shift and Right shift中的建议,我将“ \”用作右移运算符。它给我错误的结果。
例如 在javascript中,33555758 >> 24给出结果2。 但是在经典ASP 33555758 \ 24中给出除法结果。
请帮助我。
答案 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/