Я должен реализовать контрольную сумму (CRC16 CCITT), чтобы проверить содержимое файла. Контрольную сумму довольно просто реализовать на C или Java благодаря < < и >> операторам и множеству примеров, доступных в сети.Бит сдвиг, когда нет ... Оператор сдвига бит
Дело в том, что мои вычисления контрольной суммы должны быть реализованы в VBScript.
Опыт работы с этим языком почти невозможен, но, по моему мнению, в VBScript ничего не предусмотрено для смещения бит. Поэтому я полагаюсь на умножения и деления на на два. Это хорошо работает, за исключением отрицательных значений.
Я проверил несколько тестов, и я считаю, что VBScript обрабатывает его 16-битные целые числа с дополнением двух.
Q1: Может ли кто-нибудь подтвердить это (дополнение двух в VBScript)? Я не нашел точной информации с веб-сайта MSDN.
Q2: Можно ли выполнить сдвиг вправо (вправо и влево) с помощью простых математических операций, когда отрицательное число кодируется с дополнением 2?
.
Большое спасибо, я бы очень хотел избежать kludge, как иметь дело с целыми числами как массивы '1' и '0' или вызывать некоторые приложения java/c из VBScript.
EDIT спасибо за помощь, найти ниже моей реализации сдвига вправо в 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
).
Спасибо большое за раздачу кода! Мне нужно было то же самое, кроме 32 бит, что было легко сделать с вашим кодом. :) Я реализую CRC32. :) –