VBScript逻辑运算符范围

时间:2013-12-07 00:25:13

标签: vbscript range bit shift

我在IIS上使用ASP中的VBScript并且我似乎无法得到令人讨厌的错误,所以这使调试变得更加困难,更不用说它没有告诉我除了相同的错误消息之外的确切错误所以我可以只假设我的代码出了什么问题。

我的问题是:在VBScript中使用逻辑运算符AND,XOR,NOT,OR,操作数的范围是否有限制?我已经实现了一个右移位功能并使用了mod运算符,直到现在我才注意到我的函数导致了错误。

我的右移功能

function rshift(number,n)

'Shifts a number's bits n bits to the right
for i=1 to n
    if number mod 2 = 0 then
        number = number / 2
    else
        number = (number - 1) / 2
    end if 
next
rshift = number

end function 

'Fails
rshift(1125899906842624,2) 

我认为对于大于2 ^ 32(或31)-1的值,运算符不起作用。尝试谷歌搜索操作数的范围,但找不到任何有用的东西。我看到有人发布了一个关于逻辑运算符没有处理大值的话题,但我似乎无法找到它。

有人可以验证吗?

编辑:找到一个主题,提供有关在带符号的32位整数上使用mod运算符的更多信息http://blogs.msdn.com/b/ericlippert/archive/2004/12/01/integer-arithmetic-in-vbscript-part-one.aspx

1 个答案:

答案 0 :(得分:2)

在VBScript中有several subtypes for integers包括整数和长整数。 VBScript将尝试确定您使用的值的类型并使用适当的子类型。

Integer可以存储介于-32,768到32,767之间的值,long可以存储介于-2,147,483,648到2,147,483,647之间的值。您正在使用的值大于此值并将导致溢出。

您可以使用VarType功能查看您的号码被解释为的类型。您可以使用Double来表示更大的值。

This answer看起来很有趣。也许你可以将它作为你职能的一部分。