У меня есть несколько VB-скриптов в классическом ASP, которые выглядят так:
if (x and y) > 0 then 'do something end if
Кажется, работает так: (46 и 1) = 0 а также (47 и 1) = 1
Я не понимаю, как это работает. Кто-нибудь может это объяснить?
Это Побитовое И .
47 is 101111 AND 1 is 000001 = 000001
, а
46 is 101110 AND 1 is 000001 = 000000
Попробуйте
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
, и тогда он будет работать как положено.
Это делает побитовое сравнение -
Битовые операции оценивают два целых значения в двоичном формате (база 2) форма. Они сравнивают биты в соответствующих позициях и затем назначают значения основаны на сравнении.
и еще один пример -
x = 3 And 5
В предыдущем примере значение x устанавливается на 1. Это происходит для следующие причины: Значения рассматриваются как двоичные: 3 в двоичном виде = 011 5 в двоичном виде = 101 Оператор And сравнивает двоичные представления, одно двоичное положение (бит) за один раз. Если оба бита в данной позиции равны 1, то 1 помещается в эту позицию в результате. Если любой бит равен 0, то 0 помещается в эту позицию в результате. В предыдущем примере это работает следующим образом: 011 (3 в двоичном виде) 101 (5 в двоичном виде) 001 (результат в двоичном виде) Результат считается десятичным. Значение 001 является двоичным представление 1, поэтому х = 1.
В предыдущем примере значение 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