За уже почти 30 лет программирования и примерно 25 лет работы программистом, что-то, хотя бы отдалённо напоминающее использование систем счисления, отличных от десятичной, я видел примерно два раза
( Read more... )
Всё программирование сводится к программированию ПК?pavaborJune 8 2020, 10:46:55 UTC
Открываешь какой-нибудь датащит к какому-нибудь контроллеру (а конкретно для 128 x 64 Dot Matrix OLED/PLED Segment/Common Driver with Controller), а там: D/C# Hex D7 D6 D5 D4 D3 D2 D1 D0 Command Description 0 81 1 0 0 0 0 0 0 1 0 A[7:0] A7 A6 A5 A4 A3 A2 A1 A0 Set Contrast Control Double byte command to select 1 out of 256 contrast steps. Contrast increases as the value increases. (RESET = 7Fh ) Тут тебе и битики расписаны, и диапазон десятичный и шеснадцатиричные значения. Да, переводить из систему в систему не так часто нужно, но приходится, а уж ориентироваться в этом быстро - практически необходимо. Да и памяти, на какой-нибудь avrtiny85 - 512 Kb - заводить тру/фалс для каждого чиха жирно будет, как и фунции лишние.
Re: Всё программирование сводится к программированию Пlex_kravetskiJune 8 2020, 11:25:44 UTC
Некоторые даже прямо сразу в машинных кодах. Это же очень удобно, когда вместо одного часа на задачу тратится полгода: во-первых, человек при деле, во-вторых, всегда есть, что написать в отчётах, в-третьих, не приходится искать этим людям новые задачи. Именно поэтому сии специалисты так сильно востребованы.
Слабошколообразованные люди в этих случаях один раз пишут транслятор, но для такого, конечно, надо ещё в школе догадаться, что метод «вот учебник - всегда повторяй, как там написано, а если там не написано, то сдавайся» весьма далёк от оптимальности.
Программировал довольно современный контроллер открытия/закрытия дверей по отпечаткам. К примеру права доступа на открытие 4-х дверей шифровались в "двоичном" коде. Типа 1 (0001)- можно входить только в первую дверь - 3(0011) - только во вторую и первую. а 15(1111) - может во все. Т.к. не сразу догадался, пришлось побегать вручную подёргать ручки, чтоб понять.
Ну а я за последние лет десять программирования ровно наоборот: что-то, хотя бы отдаленно напоминающее использование десятичной системы, видел в исходниках считанные разы. Программирование оно такое, бывает очень разным.
Одно другому не мешает. Я не говорил, что десятичные числа, отличные от 0 и 1, мне в программах встречались сильно чаще. Как правило, в программах чисел вообще крайне мало.
Я работал в одной софтверной конторе, 70 шт. проггеров, причем не тупых кодеров, а "программистов" с компетенциями аналитиков, постановщиков и знанием предметной области. 69 не смогли ответить что за цикл фон Неймана такой...Только один, олдовый, ответил вопросом на вопрос: "А как знание цикла фон Неймана или машины Тьюринга поможет всем им в программировании веб-интерфейса или эскуэль-запроса на полстраницы а4?"
Один момент упущен. С двоичной системой программист ещё сталкивается, когда узнаёт, то если взять переменную типа byte, потом записать туда 127, потом прибавить единицу, то получится внезапно минус 128. Похоже на то, что возникает с float и double, но немного другая штука.
Нужно помнить, что добавление знака уменьшает максимальное положительное число, которое может храниться в переменной вдвое и это именно потому, что мы используем двоичную систему счисления.
И, кстати, битовые флаги вместо массива boolean исползуются не для того, чтобы сэкономить оперативную память, а для того, чтобы засунуть больше флагов в кеш
> Один момент упущен. С двоичной системой программист ещё сталкивается, когда узнаёт, то если взять переменную типа byte, потом записать туда 127, потом прибавить единицу, то получится внезапно минус 128. Похоже на то, что возникает с float и double, но немного другая штука.
Это вообще пох. Ты читаешь про тип инт, и там сказано, что покрываемый им диапазон от min_int до max_int. Собственно, это всё, что нужно знать на практике.
> И, кстати, битовые флаги вместо массива boolean исползуются не для того, чтобы сэкономить оперативную память, а для того, чтобы засунуть больше флагов в кеш
Не. Обычно они используются, потому что кто-то где-то прочитал, что «так надо». Поэтому ни в какой кэш они «побольше» не попадают - до этого просто почти никогда не доходит дело.
Ну тогда и про деление на практике нужно знать только, что его результат неточен, когда в делении участвует double или float. Какое отношение это имеет к двоичным числам знать нет никакого смысла.
Насчёт того, что битовые флаги обычно используются потому что кто-то где-то прочитал, что "так надо", тут я с тобой, конечно согласен. Даже наверное не потому что "так надо", а потому, что "так делают крутые программисты". Но смысл это имеет только если хочешь засунуть побольше данных в кеш. Ну, или, если у тебя данных очень много.
На практике я, кстати, встретил ещё один случай. Была опенсорсная библиотека, в который была функция, работающая с битовыми флагами. И так как для того, чтобы этот код переписать, понадобилось бы не меньше трёх дней, было принято волевое решение использовать флаги во всём проекте.
Comments 142
OLED/PLED Segment/Common Driver with Controller), а там:
D/C# Hex D7 D6 D5 D4 D3 D2 D1 D0 Command Description
0 81 1 0 0 0 0 0 0 1
0 A[7:0] A7 A6 A5 A4 A3 A2 A1 A0
Set Contrast Control Double byte command to select 1 out of 256
contrast steps. Contrast increases as the value
increases.
(RESET = 7Fh )
Тут тебе и битики расписаны, и диапазон десятичный и шеснадцатиричные значения.
Да, переводить из систему в систему не так часто нужно, но приходится, а уж ориентироваться в этом быстро - практически необходимо.
Да и памяти, на какой-нибудь avrtiny85 - 512 Kb - заводить тру/фалс для каждого чиха жирно будет, как и фунции лишние.
Reply
Reply
Reply
Слабошколообразованные люди в этих случаях один раз пишут транслятор, но для такого, конечно, надо ещё в школе догадаться, что метод «вот учебник - всегда повторяй, как там написано, а если там не написано, то сдавайся» весьма далёк от оптимальности.
Reply
Reply
Reply
Reply
Reply
https://lmgtfy.com/?q=%D1%86%D0%B8%D0%BA%D0%BB+%D1%84%D0%BE%D0%BD+%D0%BD%D0%B5%D0%B9%D0%BC%D0%B0%D0%BD%D0%B0
Но тот программист, конечно, тоже молодец, всё правильно сказал.
Reply
Reply
Reply
Нужно помнить, что добавление знака уменьшает максимальное положительное число, которое может храниться в переменной вдвое и это именно потому, что мы используем двоичную систему счисления.
И, кстати, битовые флаги вместо массива boolean исползуются не для того, чтобы сэкономить оперативную память, а для того, чтобы засунуть больше флагов в кеш
Reply
Это вообще пох. Ты читаешь про тип инт, и там сказано, что покрываемый им диапазон от min_int до max_int. Собственно, это всё, что нужно знать на практике.
> И, кстати, битовые флаги вместо массива boolean исползуются не для того, чтобы сэкономить оперативную память, а для того, чтобы засунуть больше флагов в кеш
Не. Обычно они используются, потому что кто-то где-то прочитал, что «так надо». Поэтому ни в какой кэш они «побольше» не попадают - до этого просто почти никогда не доходит дело.
Reply
Насчёт того, что битовые флаги обычно используются потому что кто-то где-то прочитал, что "так надо", тут я с тобой, конечно согласен. Даже наверное не потому что "так надо", а потому, что "так делают крутые программисты". Но смысл это имеет только если хочешь засунуть побольше данных в кеш. Ну, или, если у тебя данных очень много.
На практике я, кстати, встретил ещё один случай. Была опенсорсная библиотека, в который была функция, работающая с битовыми флагами. И так как для того, чтобы этот код переписать, понадобилось бы не меньше трёх дней, было принято волевое решение использовать флаги во всём проекте.
Reply
Именно так.
> Какое отношение это имеет к двоичным числам знать нет никакого смысла.
Вообще никакого - чисто из интереса для объяснения эффекта парой фраз.
> И так как для того, чтобы этот код переписать, понадобилось бы не меньше трёх дней, было принято волевое решение использовать флаги во всём проекте.
А можно-то было сделать объект или функцию для конвертации.
Reply
Leave a comment