Как понять код?
|
|
vladh |
Дата: Пт, 19.07.2019, 10:07 | Сообщение # 1 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
258
Замечания:
±
На сайте с 15.10.2007
Статус:
Offline
|
Уважаемые, подскажите. В одном из прилагаемых к программе примеров есть такой код: while TRUE
for counter = 0 to 7
LATA = LATA or 1 << counter
LATB = LATB or 1 << counter
LATC = LATC or 1 << counter
LATD = LATD or 1 << counter
LATE = LATE or 1 << counter
Wait()
next counter
counter = 0
while (counter < 8)
LATA = LATA and not(1 << counter)
LATB = LATB and not(1 << counter)
LATC = LATC and not(1 << counter)
LATD = LATD and not(1 << counter)
LATE = LATE and not(1 << counter)
wait()
Inc(counter)
wend
wend На мой взгляд он написан в стиле СИ. И из за этого этот язык мною трудно понимаем. Так вот объясните пожалуйста бестолковому, что означает строка LATA = LATA or 1 << counter
и строка LATA = LATA and not(1 << counter) ? Я, например, читаю первую строку как состояние регистра не меняется ИЛИ произвести сдвиг значение этого регистра влево на 1!?
|
|
|
|
kits |
Дата: Пт, 19.07.2019, 11:10 | Сообщение # 2 |
Группа:
Проверенные
Ранг:
Новенький
Сообщений:
18
Замечания:
±
На сайте с 13.04.2015
Статус:
Offline
|
Цитата vladh ( ) Так вот объясните пожалуйста бестолковому, что означает строка LATA = LATA or 1 << counter Сдвиг 1 влево на число в переменной counter, а после побитовое ИЛИ LATA. Производится установка бита указанного в переменой counter. То есть если в ней был 0, установится 0 бит, если 2, установится 2 бит.
Цитата vladh ( ) и строка LATA = LATA and not(1 << counter) ? Аналогично предыдущему. Сдвиг влево, инвертирование и побитовое И. Биты сбрасываются.
|
|
|
|
ivan_fd |
Дата: Пт, 19.07.2019, 15:51 | Сообщение # 3 |
Группа:
Модераторы
Ранг:
Специалист
Сообщений:
894
Замечания:
±
На сайте с 12.01.2009
Статус:
Offline
|
Цитата vladh ( ) На мой взгляд он написан в стиле СИ.
Если точнее, то в стиле VisualBasic. И в Протоне код выглядел бы, почти так же.
Код For counter = 0 to 7 LATA = LATA | (1 << counter) LATB = LATB | (1 << counter) LATC = LATC | (1 << counter) LATD = LATD | (1 << counter) LATE = LATE | (1 << counter) DelayMS(1000) Next
|
|
|
|
vladh |
Дата: Сб, 20.07.2019, 06:13 | Сообщение # 4 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
258
Замечания:
±
На сайте с 15.10.2007
Статус:
Offline
|
Цитата kits ( ) Сдвиг 1 влево на число в переменной counter, а после побитовое ИЛИ LATA. Производится установка бита указанного в переменой counter. То есть если в ней был 0, установится 0 бит, если 2, установится 2 бит. Спасибо, kits. Но вот почему выполнение операций идет не так как я думаю? Согласно правилам математики выполняются операции выполняются слева направо. Этот порядок нарушается если имеются выражения в скобках или операции умножения/деления. Т.е. Во втором цикле как бы все становится на места описанные вами(там присутствуют скобки). А вот в первом почему не так?Добавлено (20.07.2019, 06:23) ---------------------------------------------
Цитата ivan_fd ( ) И в Протоне код выглядел бы, почти так же. Спасибо, Иван. Но вот сейчас я обратил внимание на одну вещь. Я попробовал Ваш код засунуть в Протон. Действительно почти все прошло без ругательств(кроме DelayMs(1000)). Но я никогда в своих программах не использовал ни символа "|", ни символа "&" и т.п. Я всегда писал "Or" и "And". Но вот сейчас я попробовал в Вашем коде заменить "|" на "Or" и тогда компилятор выдал ошибки. Что это значит, как Вы думаете?
|
|
|
|
ivan_fd |
Дата: Сб, 20.07.2019, 11:25 | Сообщение # 5 |
Группа:
Модераторы
Ранг:
Специалист
Сообщений:
894
Замечания:
±
На сайте с 12.01.2009
Статус:
Offline
|
Цитата vladh ( ) Согласно правилам математики выполняются операции выполняются слева направо. Этот порядок нарушается если имеются выражения в скобках или операции умножения/деления. Т.е. Во втором цикле как бы все становится на места описанные вами(там присутствуют скобки). А вот в первом почему не так?
Тут немного не так как в математике. Каждый оператор имеет свой приоритет. В первом случаи, логический сдвиг имеет выше приоритет, чем логическое ИЛИ, поэтому скобки не нужны. Хотя поставить их не помешает, логичнее програма читается. Кстати в Протоне скобки нужны, иначе считает не верно. Во втором:
Цитата vladh ( ) LATA = LATA and not(1 << counter) нужны скобки, поскольку логическое НЕ и побитовое НЕ имеет выше приоритет, чем операция сдвига. Поэтому, если не поставить скобки, логическое не применится к 1-це, а не ко всему сдвигу.
Цитата vladh ( ) Спасибо, Иван. Но вот сейчас я обратил внимание на одну вещь. Я попробовал Ваш код засунуть в Протон. Действительно почти все прошло без ругательств(кроме DelayMs(1000)). Но я никогда в своих программах не использовал ни символа "|", ни символа "&" и т.п. Я всегда писал "Or" и "And". Но вот сейчас я попробовал в Вашем коде заменить "|" на "Or" и тогда компилятор выдал ошибки. Что это значит, как Вы думаете? Вот из помощи ПРОТОНА:
Цитата Logical operators Bitwise and '&' Bitwise or '|' Bitwise xor '^' Bitwise Shift Left '<<' Bitwise Shift Right '>>' Bitwise Complement '~' Bitwise Reverse '@' Returns the logical AND of two values.
А на счет DelayMS(1000) . Какая версия протона у Вас. У меня 3.7.1.6.
|
|
|
|
vladh |
Дата: Сб, 20.07.2019, 12:36 | Сообщение # 6 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
258
Замечания:
±
На сайте с 15.10.2007
Статус:
Offline
|
Цитата ivan_fd ( ) А на счет DelayMS(1000) . Какая версия протона у Вас. У меня 3.7.1.6.
У меня 3,5,8,6. А все таки как насчет:
Цитата vladh ( ) Но я никогда в своих программах не использовал ни символа "|", ни символа "&" и т.п. Я всегда писал "Or" и "And". Но вот сейчас я попробовал в Вашем коде заменить "|" на "Or" и тогда компилятор выдал ошибки. Что это значит, как Вы думаете? Т.е. почему эти разные записи операторов не равноправны?
Сообщение отредактировал
vladh - Сб, 20.07.2019, 12:38
|
|
|
|
ivan_fd |
Дата: Сб, 20.07.2019, 15:31 | Сообщение # 7 |
Группа:
Модераторы
Ранг:
Специалист
Сообщений:
894
Замечания:
±
На сайте с 12.01.2009
Статус:
Offline
|
Потому, что в Протоне такой синтаксис. В МикроБейсике другой. В C, например, так же как и в Протоне. Не OR, а |.
|
|
|
|
vladh |
Дата: Сб, 20.07.2019, 18:29 | Сообщение # 8 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
258
Замечания:
±
На сайте с 15.10.2007
Статус:
Offline
|
Цитата ivan_fd ( ) Потому, что в Протоне такой синтаксис. В МикроБейсике другой. В C, например, так же как и в Протоне.Не OR, а |.
Иван, Вы наверное меня не поняли(или я чего то понять не могу). Я обычно в своих программах на Протоне использую логический оператор Or и никогда "|". Например кусок кода моей программы:
Цитата Repeat GoSub KeyPad Until Key = 1 Or Key = 2 Or Key = 3 Or Key = 4 Or Key = 11
Этот код компилируется без проблем. Даже если я поменяю Or на |. Когда же в Вашем примере я попытался вертикальную черту заменить на этот оператор компилятор высказал мне своё фи. Почему? Когда можно использовать Or, а когда |?
Сообщение отредактировал
vladh - Сб, 20.07.2019, 18:36
|
|
|
|
kits |
Дата: Сб, 20.07.2019, 18:52 | Сообщение # 9 |
Группа:
Проверенные
Ранг:
Новенький
Сообщений:
18
Замечания:
±
На сайте с 13.04.2015
Статус:
Offline
|
В многих бейсиках Or это логический, а | битовый оператор. То есть первый используется как в вашем примере с Until, а второй для установки битов.
|
|
|
|
ivan_fd |
Дата: Сб, 20.07.2019, 20:24 | Сообщение # 10 |
Группа:
Модераторы
Ранг:
Специалист
Сообщений:
894
Замечания:
±
На сайте с 12.01.2009
Статус:
Offline
|
Теперь понял, что Вы имели ввиду. Вам выше уже ответили. Можете, так же посмотреть файл помощи: Boolean Logic Operators
|
|
|
|
vladh |
Дата: Вс, 21.07.2019, 08:29 | Сообщение # 11 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
258
Замечания:
±
На сайте с 15.10.2007
Статус:
Offline
|
kits и ivan_fd, большое вам спасибо. Очередной раз заглянув в Help обратил внимание, что Or и | это разные операторы. Они относятся к разным группам и выполняют разные функции. А это значит, что механическая их замена будет неправильным действием! И еще. Я до этого никогда не задумывался над тем, что у логических операторов также присутствует разделение по старшинству. Иван правильно обратил внимание, что желательно всегда ставить скобки дабы не было путаницы.
Сообщение отредактировал
vladh - Вс, 21.07.2019, 08:37
|
|
|
|
kits |
Дата: Вс, 21.07.2019, 13:27 | Сообщение # 12 |
Группа:
Проверенные
Ранг:
Новенький
Сообщений:
18
Замечания:
±
На сайте с 13.04.2015
Статус:
Offline
|
Цитата vladh ( ) Я до этого никогда не задумывался над тем, что у логических операторов также присутствует разделение по старшинству. Посмотрите справку на интересующий бейсик. Должна быть таблица похожая на эту (это разновидность бейсика для компа).
Сообщение отредактировал
kits - Вс, 21.07.2019, 13:28
|
|
|
|
vladh |
Дата: Пн, 22.07.2019, 06:42 | Сообщение # 13 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
258
Замечания:
±
На сайте с 15.10.2007
Статус:
Offline
|
Цитата kits ( ) Посмотрите справку на интересующий бейсик. Должна быть таблица похожая на эту (это разновидность бейсика для компа).
В моем хелпе написано мало. Я нашел только это:
Цитата The boolean operands do have a precedence within a condition. The and operand has the
highest priority, then the or, then the xor. This means that a condition such as
Поэтому прихожу к выводу, что правильней будет сильно не задумываться какой оператор имеет высший приоритет, а просто использовать скобки для расстановки приоритетов операций. У МикроБейсика я вообще не нашел указания на приоритетность логических операторов.
Сообщение отредактировал
vladh - Пн, 22.07.2019, 06:50
|
|
|
|
Antonionwo |
Дата: Ср, 22.06.2022, 00:13 | Сообщение # 14 |
Группа:
Заблокированные
Ранг:
Пытаюсь разобраться
Сообщений:
49
Замечания:
±
На сайте с 31.01.2021
Статус:
Offline
|
Добрый день друзья! Предлагаем Вашему вниманию замечательный сайт https://dengi-do-zarplaty.ru/ Конечно, никто не хочет давать деньги в долг и особенно никому не хочется брать их взаймы. Но иногда ситуация решает за нас и приходится очень срочно искать, откуда взять деньги. В первую очередь обычно обращаются к родственникам, друзьям, коллегам по работе, партнерам по бизнесу, но во многих случаях они могут отказать. Хорошим выбором будет обратиться в финансовую компанию, в которой можно на выгодных условиях взять кредит, чтобы улучшить свое положение. Причем важно не только оформить кредит быстро с хорошими требованиями, но и взять кредит наличными под низкий процент. Никто не хочет влезать в долги, которые еще не понятно, как придется отдавать.
тонировка окон пвх
|
|
|
|
Bogdanevc |
Дата: Пт, 21.07.2023, 13:18 | Сообщение # 15 |
Группа:
Заблокированные
Ранг:
Новенький
Сообщений:
3
Замечания:
±
На сайте с 27.12.2020
Статус:
Offline
|
Здравствуйте друзья. Предлагаем Вашему вниманию интересный сайт для заказа услуг стоматологии в Минске.К вашим услугам лучшие стоматологи Минска с многолетним стажем.стоматология минск,удаление зуба, отбеливание зубов,лечение зуба,удаление зуба мудрости,стоматология минск цены и стоматология платные услуги минск. Стоматология премиум-класса в Минске.Приветствуем Вас на официальном сайте стоматологической поликлиники в Минске. С 2008 года мы оказываем гражданам Беларуси, России, Украины, Казахстана, Германии, Англии и других стран СНГ и Европы стоматологические услуги высокого качества.Наша стоматология работает ежедневно и находится в Московском районе Минска, в микрорайоне Малиновка.Мы гордимся тем, что собрали первоклассную команду врачей-стоматологов, которые любят свою работу и делают ее хорошо.Платная стоматология в Минске.Мы – платная стоматология, но цены у нас не кусаются. При этом мы оснастили наши кабинеты современным дорогим оборудованием и инструментами. Мы знаем, что без крепкого здоровья сложно быть счастливым, поэтому приобретаем для лечения только надежные и безопасные материалы. Они обеспечат долговечность итогам лечения, протезирования, имплантации и др. Уже 10 лет благодаря высокотехнологичному оснащению и своему мастерству наши опытные врачи безболезненно проводят сложные манипуляции в ротовой полости и восстанавливают даже безнадежные зубы. Мы беремся за сложные задачи.Получить консультацию в частной стоматологии Вы можете онлайн или записавшись к нам на прием.Стоматология в Беларуси для всей семьи.Нас называют «семейная стоматология», и не зря. Ведь мы предоставляем услуги женщинам и мужчинам любых возрастов, а также детям от 14 лет. К нам приходят целыми семьями, чему мы очень рады, ведь это говорит о том, что мы двигаемся в правильном направлении.Мы выражаем огромную благодарность людям, которые рекомендуют нас своим друзьям и знакомым, которые пишут искренние отзывы о нашей работе и остаются с нами на протяжении многих лет. Ваши отзывы и радостная улыбка – это лучшая благодарность нам, это наше все, и мы этим очень гордимся. Спасибо Вам! От всей души Вам всех благ! имплантация зубов цены акции профессиональная гигиеническая чистка зубов сколько стоит полировка зубов airflow минск гигиена полости рта у взрослых протезирование на 6 имплантах имплантация московский район установка одного импланта зуба straumann воспалилась десна зуб удаление лучшая анестезия при удалении зуба сколько отходит анестезия после лечения зуба рентген зуба минск удаление зубов перед имплантацией протезирование металлокерамическими коронками отличие циркониевой и металлокерамической коронки лучшие клиники по имплантации зубов металлические лигатурные брекеты съемные зубные протезы на 2 зуба виды металлокерамических коронок на зубы профессиональная чистка зубов с брекетами фотоотбеливание зубов цена пластинка для зубов съемная верхнего неба лечение гранулирующего периодонтита пульпит клиника диагностика лечение профессиональная гигиена полости рта как часто сколько стоят керамические брекеты гемостатическая губка после удаления зуба элайнеры описание стоматологии г минска съемные зубные протезы виниры имплантация 21 зуба стоматология проспект дзержинского минск сколько занимает профессиональная чистка зубов заживление лунки после удаления зуба мудрости депульпировать зуб под металлокерамику имплантация 3 зубов подряд коронки с керамической облицовкой удаление 1 зуба удаление 8 зуба удаление зуба мудрости губка виниринг зубов гель для отбеливания зубов удобные съемные зубные протезы элайнеры для выравнивания зубов цена зубной съемный протез коррекция имплант с циркониевой коронкой под ключ аппарат снятия зубных отложений стоматология минск имплантация зубов гингивопластика зубов имплантация передних верхних зубов
уровни купить
|
|
|
|