Битовый сдвиг, когда нет … оператора битового сдвига

Мне нужно реализовать контрольную сумму (CRC16 CCITT )для проверки содержимого файла.. Контрольную сумму довольно просто реализовать на C или Java благодаря операторам << и >> и множеству примеров, доступных в сети.

Дело в том, что вычисление моей контрольной суммы должно быть реализовано на VBScript.

Мой опыт работы с этим языком почти нулевой, но, насколько я понимаю, в VBScript нет ничего для смещения битов. Поэтому я полагаюсь на умножение и деление на два. Это работает хорошо, за исключением отрицательных значений .

Я провел несколько тестов и считаю, что VBScript обрабатывает свои 16-битные целые числа с дополнением до двух.

Q1:может ли кто-нибудь подтвердить мне это (дополнение до двух в VBScript )? Я не нашел точной информации на сайте MSDN.

Q2:Можно ли выполнить битовый сдвиг (вправо и влево )с помощью простых математических операций, когда отрицательное число закодировано с дополнением до двух?

.

Большое спасибо, я действительно хотел бы избежать путаницы, такой как работа с целыми числами как массивами «1» и «0» или вызов какого-либо приложения java/c из VBScript.

РЕДАКТИРОВАТЬ спасибо за помощь, найдите ниже мою реализацию сдвига вправо в VBScript:

Function rightShift(value,bits)
    Dim res

    res = 65535 AND value

    If value>=0 Then
       res = res \ (2^bits)
    Else If value=-1 Then
             res = rightShift(res + 32768, bits - 1)
         Else
             res = rightShift(value \ 2 + 32768, bits - 1)
         End If
    End If

    rightShift = res AND 65535
End Function 

Примечание о приведенном выше коде :значение иногда превышало 16 бит, поэтому мне пришлось маскировать избежать переполнения(AND 65535).

6
задан Jerome 30 April 2012 в 06:10
поделиться