Побитовый сдвиг вправо >>
не равен простому делению \
на заданное число, а на заданное число раз на целое число 2, которое является двоичным 10. Сдвиг бит сдвигает каждый ди git в набор битов правильно. Т.е. деление на двоичное число 10 удаляет двоичное число di git из числа и сдвигает цифры вправо.
Пример: 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/