我需要在VBScript中实现一个校验和(CRC16 CCITT),以验证文件的内容。
由于VBScript中没有提供位移操作符,所以我必须依靠乘以2和除以2等简单的数学运算来计算校验和。但是这种方法对于负数不起作用。
我进行了一些测试,发现VBScript使用补码表示其16位整数。
Q1: 有人能够确认VBScript使用的是补码表示法吗?我在MSDN网站上没有找到精确的信息。
Q2: 当使用补码表示法时,是否可以使用简单的数学运算进行位移(左移和右移)?
.
非常感谢您的帮助,以下是我在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
关于上述代码的说明:value有时会超过16位,因此我必须掩盖未使用的位以避免溢出(AND 65535
)。