(编号和编号)在VBscript中



我在经典ASP中有一些VB脚本,看起来像这样:

if (x and y) > 0 then
    'do something
end if

它似乎是这样工作的:(46 and 1) = 0和(47 and 1) = 1

我不明白这是怎么回事。有人能解释一下吗?

这是位与运算

    47 is 101111
AND  1 is 000001
        = 000001

,

    46 is 101110
AND  1 is 000001
        = 000000

这是按位比较-

按位运算求二进制(以2为基数)中的两个整数值的形式。它们比较相应位置的位,然后赋值基于比较的值。

和另一个例子-

x = 3 And 5

上例中设置x的值为1。这种情况发生在以下原因:

这些值被视为二进制:

3二进制格式= 011

5的二进制形式= 101

And运算符比较二进制表示,一个二进制每次定位(位)。如果给定位置的两个位都是1,则在结果中,1被放在那个位置。如果任意一位为0,则0被放在结果中的那个位置。在前面的例子中结果如下:

011(3二进制格式)

101(5二进制)

001(结果,二进制形式)

将结果作为小数处理。001是二进制表示1,所以x = 1

From - http://msdn.microsoft.com/en-us/library/wz3k228a(v=vs.80).aspx

Try

x = 47
y = -1
if (x AND y) > 0 then
    'erroneously passes condition instead of failing
end if


代码应该是

if (x > 0) AND (y > 0) then
    'do something
end if

,然后它会正常工作

最新更新