(Номер и номер) в VBscript - PullRequest
       0

(Номер и номер) в VBscript

3 голосов
/ 14 октября 2011

У меня есть несколько VB-скриптов в классическом ASP, которые выглядят так:

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

Кажется, работает так: (46 и 1) = 0 а также (47 и 1) = 1

Я не понимаю, как это работает. Кто-нибудь может это объяснить?

Ответы [ 3 ]

8 голосов
/ 14 октября 2011

Это Побитовое И .

    47 is 101111
AND  1 is 000001
        = 000001

, а

    46 is 101110
AND  1 is 000001
        = 000000
1 голос
/ 14 октября 2011

Попробуйте

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

, и тогда он будет работать как положено.

1 голос
/ 14 октября 2011

Это делает побитовое сравнение -

Битовые операции оценивают два целых значения в двоичном формате (база 2) форма. Они сравнивают биты в соответствующих позициях и затем назначают значения основаны на сравнении.

и еще один пример -

x = 3 And 5

В предыдущем примере значение x устанавливается на 1. Это происходит для следующие причины:

Значения рассматриваются как двоичные:

3 в двоичном виде = 011

5 в двоичном виде = 101

Оператор And сравнивает двоичные представления, одно двоичное положение (бит) за один раз. Если оба бита в данной позиции равны 1, то 1 помещается в эту позицию в результате. Если любой бит равен 0, то 0 помещается в эту позицию в результате. В предыдущем примере это работает следующим образом:

011 (3 в двоичном виде)

101 (5 в двоичном виде)

001 (результат в двоичном виде)

Результат считается десятичным. Значение 001 является двоичным представление 1, поэтому х = 1.

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

...