|
Интересный вопрос
|
|||
---|---|---|---|
#18+
Добрый день. Впервые столкнулся с новой для себя конструкцией логического оператора AND. Может кто-нибудь прокомментировать, почему такой результат у нижеследующих условий. Язык: WScript Num = 0 If 514 AND 2 Then Num = Num +1 End If MsgBox Num ' Равно 1 Num = 0 If 512 AND 2 Then Num = Num +1 End If MsgBox Num ' Равно 0 ... |
|||
:
Нравится:
Не нравится:
|
|||
18.07.2011, 07:44 |
|
Интересный вопрос
|
|||
---|---|---|---|
#18+
514 10 =1000000010 2 2 10 =0000000010 2 A & B = 10 2 > 0 = True 512 10 =1000000000 2 2 10 =0000000010 2 A & B = 0 2 = 0 = False ... |
|||
:
Нравится:
Не нравится:
|
|||
18.07.2011, 08:27 |
|
Интересный вопрос
|
|||
---|---|---|---|
#18+
Avatar, Это WScript с синтаксисом бейсика... а тут операции And и Or - являются одновременно побитовыми... вот оно так и получается, а AndreTM - расписал тебе ещё и мат.часть ;) ... |
|||
:
Нравится:
Не нравится:
|
|||
18.07.2011, 15:35 |
|
Интересный вопрос
|
|||
---|---|---|---|
#18+
majestic-mike, откуда такая теория берётся If 514 AND 2 Then переводим на человеческий язык Если 514 и 2 тогда ... как умудрились так написать, и главное ошибки нет и уж проверять так проверять удевлен, что даже так If 514 Then нет ошибки ????? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.07.2011, 18:22 |
|
Интересный вопрос
|
|||
---|---|---|---|
#18+
Ципихович ЭндрюIf 514 AND 2 Then переводим на человеческий язык Если 514 и 2 тогда ...Изучай булеву алгебру, побитовые логические операции и двоичную систему счисления (эх, раньше это должен был понимать любой программист) Ципихович Эндрюи уж проверять так проверять удевлен, что даже так If 514 Then нет ошибкиЧисло 514 в данном контексте неявно преобразовалось в Boolean, конкретно в True. Я говорил, что неявные преобразования - зло, но VB их допускает. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.07.2011, 18:49 |
|
Интересный вопрос
|
|||
---|---|---|---|
#18+
Shocker.Proнеявные преобразования - злоПочему? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.07.2011, 21:07 |
|
Интересный вопрос
|
|||
---|---|---|---|
#18+
AntonariyShocker.Proнеявные преобразования - злоПочему?Потому что они неявны. Писать с ними проще - да. Отлавливать баг изза случайного неявного преобразования - замучаешься. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.07.2011, 21:09 |
|
Интересный вопрос
|
|||
---|---|---|---|
#18+
White Owl, случайности не случайны. (с) Черепаха Могвэй. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.07.2011, 21:47 |
|
Интересный вопрос
|
|||
---|---|---|---|
#18+
AntonariyShocker.Proнеявные преобразования - злоПочему? Потому что тут можно найти с десяток топиков за последние пару месяцев, где главная ошибка автора заключалась в том, что он не понимает, что происходит такое преобразование и из-за него его прога не фурычит. Ну и Сычу +1 ... |
|||
:
Нравится:
Не нравится:
|
|||
19.07.2011, 01:16 |
|
Интересный вопрос
|
|||
---|---|---|---|
#18+
неявные преобразования - злоНе доказано. незнание о неявных преобразованиях — злопоправил ... |
|||
:
Нравится:
Не нравится:
|
|||
19.07.2011, 11:57 |
|
Интересный вопрос
|
|||
---|---|---|---|
#18+
Antonariyнезнание о неявных преобразованиях — злопоправил Тут вступает в действие аргумент Сыча - можно даже зная о них, тем не менее допустить ошибку. Искать такую ошибку непросто, потому что кажется, что все нормально ... |
|||
:
Нравится:
Не нравится:
|
|||
19.07.2011, 12:01 |
|
Интересный вопрос
|
|||
---|---|---|---|
#18+
Никогда не бывал в такой ситуации. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.07.2011, 12:26 |
|
Интересный вопрос
|
|||
---|---|---|---|
#18+
Ципихович Эндрюmajestic-mike, откуда такая теория берётся If 514 AND 2 Then переводим на человеческий язык Если 514 и 2 тогда ... как умудрились так написать, и главное ошибки нет и уж проверять так проверять удевлен, что даже так If 514 Then нет ошибки ????? Ладно вам холиварить... лучше человеку помогите :)) Если на человеческий язык - то все числовые значения переводятся в int на 32-х разрядной системе int - это 32-битное целочисленное значение теперь "таблица истинности" для операции "логическое И" A|B| A and B -------- 0|0| 0 -------- 0|1| 0 -------- 1|0| 0 -------- 1|1| 1 -------- 514 - это в десятичной системе счисления, в двоичной будет выглядеть как 00000000000000000000001000000010 2 - это в десятичной системе счисления, в двоичной будет выглядеть как 00000000000000000000000000000010 Их побитовое логическое И - есть следующий результат (см. таб. истинности) 00000000000000000000001000000010 00000000000000000000000000000010 ------------------------------------- 00000000000000000000000000000010 он не ноль, а стало быть в контексте преобразования к Boolean - есть True вот и вся соль... по этой простой причине If 514 Then - тоже будет выполняться всегда Вероятно просто код, с которым ты сейчас разбираешься был отписан с какого то высокоуровневого языка, а задача которая представляется в этом If - это просто нужно проверить что в общем наборе флагов, отвечающих за какие то состояния чего-то - установлен некоторый конкретный флажочек... просто имя для этого флажочка не перенисли а сразу заменили значением "2"... как то так... ... |
|||
:
Нравится:
Не нравится:
|
|||
19.07.2011, 13:34 |
|
|
start [/forum/topic.php?fid=60&msg=37356517&tid=2158552]: |
0ms |
get settings: |
7ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
36ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
47ms |
get tp. blocked users: |
2ms |
others: | 357ms |
total: | 481ms |
0 / 0 |