我在经典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
,然后它会正常工作