script language="vbscript">
' Aother: 奔腾的心
' QQ: 7180001
' Date: 2008-01-17
Class mShift
Private m_lPower2(31)
Public Function RShift(ByVal lThis, ByVal lBits)
On Error Resume Next
Init
If (lBits = 0) Then
RShift = lThis
ElseIf (lBits > 63) Then
' .. error ...
ElseIf (lBits > 31) Then
RShift = 0
Else
If (lThis And m_lPower2(31 - lBits)) = m_lPower2(31 - lBits) Then
RShift = (lThis And (m_lPower2(31 - lBits) - 1)) * m_lPower2(lBits) Or
m_lPower2(31)
Else
RShift = (lThis And (m_lPower2(31 - lBits) - 1)) * m_lPower2(lBits)
End If
End If
End Function
Public Function LShift(ByVal lThis, ByVal lBits)
On Error Resume Next
Init
If (lBits = 0) Then
LShift = lThis
ElseIf (lBits > 63) Then
' ... error ...
ElseIf (lBits > 31) Then
LShift = 0
Else
If (lThis And m_lPower2(31)) = m_lPower2(31) Then
LShift = (lThis And H7FFFFFFF) \&;m_lPower2(lBits) Or m_lPower2(31 - lBits)
Else
LShift = lThis \&;m_lPower2(lBits)
End If
End If
End Function
Private Sub Init()
On Error Resume Next
m_lPower2(0) = H1
m_lPower2(1) = H2
m_lPower2(2) = H4
m_lPower2(3) = H8
m_lPower2(4) = H10
m_lPower2(5) = H20
m_lPower2(6) = H40
m_lPower2(7) = H80
m_lPower2(8) = H100
m_lPower2(9) = H200
m_lPower2(10) = H400
m_lPower2(11) = H800
m_lPower2(12) = H1000
m_lPower2(13) = H2000
m_lPower2(14) = H4000
m_lPower2(15) = H8000
m_lPower2(16) = H10000
m_lPower2(17) = H20000
m_lPower2(18) = H40000
m_lPower2(19) = H80000
m_lPower2(20) = H100000
m_lPower2(21) = H200000
m_lPower2(22) = H400000
m_lPower2(23) = H800000
m_lPower2(24) = H1000000
m_lPower2(25) = H2000000
m_lPower2(26) = H4000000
m_lPower2(27) = H8000000
m_lPower2(28) = H10000000
m_lPower2(29) = H20000000
m_lPower2(30) = H40000000
m_lPower2(31) = H80000000
End Sub
End Class
Dim sft
Set sft = New mShift
MsgBox sft.RShift(200, 4)
MsgBox sft.LShift(200, 4)
Set sft = Nothing
/script>
script language="javascript">
alert(2004);
alert(200>>4);
/script>