powered by simpleCommunicator - 2.0.55     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Интересный вопрос
14 сообщений из 14, страница 1 из 1
Интересный вопрос
    #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
Интересный вопрос
    #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
Интересный вопрос
    #37356119
majestic-mike
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Avatar,

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

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

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


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