Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Интересный вопрос / 14 сообщений из 14, страница 1 из 1
18.07.2011, 07:44
    #37355369
Avatar
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интересный вопрос
Добрый день. Впервые столкнулся с новой для себя конструкцией логического оператора 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
...
Рейтинг: 0 / 0
18.07.2011, 08:27
    #37355384
AndreTM
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интересный вопрос
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
...
Рейтинг: 0 / 0
18.07.2011, 15:35
    #37356119
majestic-mike
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интересный вопрос
Avatar,

Это WScript с синтаксисом бейсика... а тут операции And и Or - являются одновременно побитовыми... вот оно так и получается, а AndreTM - расписал тебе ещё и мат.часть ;)
...
Рейтинг: 0 / 0
18.07.2011, 18:22
    #37356476
Ципихович Эндрю
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интересный вопрос
majestic-mike, откуда такая теория берётся
If 514 AND 2 Then
переводим на человеческий язык
Если 514 и 2 тогда ...
как умудрились так написать, и главное ошибки нет
и уж проверять так проверять удевлен, что даже так If 514 Then
нет ошибки
?????
...
Рейтинг: 0 / 0
18.07.2011, 18:49
    #37356517
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интересный вопрос
Ципихович ЭндрюIf 514 AND 2 Then
переводим на человеческий язык
Если 514 и 2 тогда ...Изучай булеву алгебру, побитовые логические операции и двоичную систему счисления (эх, раньше это должен был понимать любой программист)

Ципихович Эндрюи уж проверять так проверять удевлен, что даже так If 514 Then
нет ошибкиЧисло 514 в данном контексте неявно преобразовалось в Boolean, конкретно в True. Я говорил, что неявные преобразования - зло, но VB их допускает.
...
Рейтинг: 0 / 0
18.07.2011, 21:07
    #37356669
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интересный вопрос
Shocker.Proнеявные преобразования - злоПочему?
...
Рейтинг: 0 / 0
18.07.2011, 21:09
    #37356672
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интересный вопрос
AntonariyShocker.Proнеявные преобразования - злоПочему?Потому что они неявны.
Писать с ними проще - да. Отлавливать баг изза случайного неявного преобразования - замучаешься.
...
Рейтинг: 0 / 0
18.07.2011, 21:47
    #37356728
скукотища
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интересный вопрос
White Owl,
случайности не случайны. (с) Черепаха Могвэй.
...
Рейтинг: 0 / 0
19.07.2011, 01:16
    #37356870
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интересный вопрос
AntonariyShocker.Proнеявные преобразования - злоПочему? Потому что тут можно найти с десяток топиков за последние пару месяцев, где главная ошибка автора заключалась в том, что он не понимает, что происходит такое преобразование и из-за него его прога не фурычит.

Ну и Сычу +1
...
Рейтинг: 0 / 0
19.07.2011, 11:57
    #37357346
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интересный вопрос
неявные преобразования - злоНе доказано.
незнание о неявных преобразованиях — злопоправил
...
Рейтинг: 0 / 0
19.07.2011, 12:01
    #37357358
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интересный вопрос
Antonariyнезнание о неявных преобразованиях — злопоправил Тут вступает в действие аргумент Сыча - можно даже зная о них, тем не менее допустить ошибку. Искать такую ошибку непросто, потому что кажется, что все нормально
...
Рейтинг: 0 / 0
19.07.2011, 12:26
    #37357438
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интересный вопрос
Никогда не бывал в такой ситуации.
...
Рейтинг: 0 / 0
19.07.2011, 13:34
    #37357660
majestic-mike
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интересный вопрос
Ципихович Эндрю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"... как то так...
...
Рейтинг: 0 / 0
19.07.2011, 13:42
    #37357683
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интересный вопрос
majestic-mikeЛадно вам холиварить... лучше человеку помогите :))
Какому человеку? Автор больше не появляется, видать все понял, а ЦЭ все равно не понял, даже после твоего объяснения
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Интересный вопрос / 14 сообщений из 14, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]