Великое переполнение millis()

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

mykaida пишет:

А вы опять всё пишете, чёт как-то не смешно.

Да, Вы правы. Удалил.

Maxim Z.
Offline
Зарегистрирован: 12.01.2016

Я с вами согласен, опускаться на постоянку на низкий уровень смысла нет иначе зачем он вообще тогда этот уровень.

Но еще ни один человек не научился одномоментно какому либо знанию или навыку полностью. Все делается по шагам, постепенно. Сначала человек учится ползать, потом делает шаг, потом уверенно ходит и лишь потом уже бегает и катается на велосипеде. Никто не учит ребенка делать шаг через элементы бега.
Так и здесь. Но это мое ИМХО. Возможно в вашем опыте были люди, которые только сев за комп уже научились профессионально программировать.

Кирилл123
Offline
Зарегистрирован: 07.08.2019

Всем привет!

Народ, я честно почитал про дополнительный код. Уже даже начал понимать почти уверенно, как этим пользоваться - т.е. переводим процесс вычитания в процесс сложения, инвертируя и добавляя 1 к числу с отрицательным знаком. Уже даже разобрался про старший бит, что от него зависит знак числа. Даже разобрался с переводом ответа в прямой код. Т.е. прибавлял к числу ответа (если старший бит равен 1) "-1", т.е.  прибавлял к отрицательному ответу "11111110", потом ответ инвертировал, не забывая, что число отрицательное. Окей.

Но я не могу решить эти задачи. Третий день не могу спать спокойно. 

Сжальтесь, подскажите ответы? Я уже в ардуину загнал задачи, запустил в цикле, чтобы найти правильный ответ, но ничего не получается. 

Подскажите пожалуйста, а я уже догоню по ответу почему это так.

((((

Всем заранее спасибо. Писать что нубяра - нет необходимости.

Заранее спасибо.

Кирилл123
Offline
Зарегистрирован: 07.08.2019

Евгений, ОГРОМНОЕ спасибо!

Скопировал, буду осознавать!

Кирилл123
Offline
Зарегистрирован: 07.08.2019

Всем привет. Проанализировал задачи, зная подсказанные ответы. По второй задаче, там где умножение на 2 (ну, по идее, машина ведь это считает просто сложением числа с самим собой) вопроса нет. Хотя, конечно, с какойто стороны, ловко получилось. А вот по поводу первой задачи, правильно ли я понимаю, что вся шутка этого фокуса заключена в свойстве преобразования в дополнительный код?
Свою ошибку, почему не нашёл ответ с помощью скетча (завтра, кстати, перепроверю с помощью скетча, но не потому, что не доверяю, а для проверки самой ардуины. Просто правильные пределы для цикла проставить и получить заветный результат в монитор порта) , это то, что во всех примерах про доп.код оперируют с однобайтным числом, а у нас ведь речь идёт про двух-байтное число.
Не представляю, как эти задачи предполагалось высчитать в уме, условно говоря... А так да, интересно. И кстати, может просто везло, но ни в каких примерах никогда не попадалось задание интервала сложением, всегда вычитанием. Потому даже никогда и не задумывался складывать.) ) ) всем спасибо, тема для меня неожиданно оказалась очень интересной!

v258
v258 аватар
Offline
Зарегистрирован: 25.05.2020

Кирилл123 пишет:
умножение на 2 (ну, по идее, машина ведь это считает просто сложением числа с самим собой)

Машине нет нужды складывать число с собой. Она просто двигает биты влево/вправо )) Умножение на 2, 4, 8 и т.д. - это побитовый сдвиг влево

25 * 2 = 50

0b00011001 
<< 1
0b00110010

25 * 4 = 100

0b00011001 
<< 2
0b01100100

И т.д. Сдвиг вправо дает, соответственно, деление на 2, 4, 8 и т.д.

Кирилл123
Offline
Зарегистрирован: 07.08.2019

Спасибо! Вот опять же, ещё одна интересная тема. Двоичная арифметика. Начну читать по ней материал. Вот так, с обычных (обычных ли?) дигитал врайт, плавно спускаюсь к пониманию работы с портами уже на уровень ниже. Ну чтож, пора пополнять знания, хоть элементарные основы.. .

brokly
brokly аватар
Offline
Зарегистрирован: 08.02.2014

А после двоичных операций , не лишним будет почитать о том как реализуется умножение на нечетные множители, потом и про деление. И читать так можно бесконечно. Это только обыватель думает, что все кто сели за комп уже "куллпрограммисты" .....