А вот тут поподробней.
Да тут всё просто для того, что занимался программированием. В CV часто разные опции включаются, выключаются разными битами, например:
0бит - лок двигается на аналоге (значение бита 2^0 = 1)
1бит - на аналоге горят фонари перед./зад. хода (значение бита 2^1 = 2)
2бит - на аналоге работает звук (значение бита 2^2 = 4)
Чтобы задать комбинацию включенных опций, нужно просто просуммировать их значения, например, чтобы включить всё сразу - суммируем 1+2+4=7, пишем в CV и вуаля!
Легко посчитать сумму четырёх младших битов - от 0 до 15, но если нужно задать разные значения битов от 0-го до 7-го включительно? Например, какое значение нужно записать, чтобы получилась следующая комбинация: 10110101? Вычислите в уме быстро? 128+32+16+4+1=? Хорошо, посчитав мы получим 181. А теперь, попробовав опцию, задаваемую битом 4 нужно её выключить, то есть записать 10100101... Вобщем опять арифметика. В чём преимущества шестнадцатиричной записи:
... и добавил:
- байт (8 битов, значения от 0-255) делится пополам по 4 бита и задаётся двумя шестнадцатиричными цифрами от 0 до F (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A - это 10, B - это 11, C - это 12, D - 13, E - 14 и F - 15)
- таким образом наша исходная комбинация битов 10110101 предстаёт в виде двух половинок (каждая шестнадцатиричная цифра представляет ровно 4 бита): 1011 и 0101. Как я говорил - значение 4 битов сосчитать несложно: двоичное 1011 - это десятичное 8+2+1=11, а двоичное 0101 - это 4+1=5
- поупражнявшись с этой системой счисления комбинации битов уже не приходится считать - всё уже в голове.
Так вот в двоичная комбинации битов 1011 и 0101 в десятичном виде будут числа 11 и 5, что в шестнадцатиричном виде есть цифры B5, что и пишем в декодер. А теперь надо сбросить в 0 4-ый бит, то есть младший разряд в шестнадцатиричной цифре B - получится 1010 - десятичное 10 или шестнадцатиричное A. Пишем в CV A5 и радуемся.
... и добавил:
А теперь более интересный пример. Допустим в инструкции сказано, что "скорость перемещения привода стрелки задается в битах 2-5", причём в остальных битах также есть какие-то значения. Хотим увеличить скорость движения привода. Как это выглядит в обеих системах - десятичной и двоичной:
1. Родимая наша десятичная:
смотрим в CV, а там стоит десятичное 208. Что это значит? это значит, что нам надо перевести это в двоичную систему, чтобы вычленить оттуда биты 2-5, в которых записана скорость (раскладываем по степеням цифры 2):
208 = 128 + 64 + 16, что соответствует комбинации битов 11
010000, где жирным отмечены наши биты. То есть скорость сейчас - 4 (диапазон доступных значений от 0 до 15). Хотим увеличить на 5 - до 9, что будет соответствовать комбинации битов 1001, теперь вписываем это всё в наше значение CV 11
100100 и занимаемся обратной арифметикой:
128+64+32+8=232. Пишем в CV и радуемся "оживлению" привода.
... и добавил:
2. Вражеская программистская шестнадцатиричная система:
смотрим в CV, а там стоит D0, где старшая цифра - это десятичное 13 или двоичное 1101, а младший 0 и есть 0, то есть двоичный 0000, получается 11
01 0000, где наша скорость выделена жирным, то есть десятичная 4. При увеличении скорости до 9 получаем снова 1001, что разойдётся по старшей и младшей частям шестнадцатиричного значения - 10 01, то есть в двоичном виде это будет выглядеть как две половинки байта - 1110 и 0100. А мы то уже знаем, что 1110 - это шестнадцатиричное E, а 0100 - это шестнадцатиричное 4. Пишем в CV значение E4 и радуемся такой же живенькой работе привода.
... и добавил:
То есть когда нужно изменить всего лишь один бит, то нужно изменить всего лишь одну шестнадцатиричную цифру в значении CV, а для десятичного значения нужно пересчитывать всё число целиком.