206 Часть II. Программирование на C++
возможными значениями к будут числа от 0 до 9, индекс при а покажет порядок разряда, р равняется 10, а показатель степени — любое число от О до бесконечности.
Посмотрим на то, как представить этой формулой число 123 :
Зо10° + 2i101 + 1z102 = (3 * 10°) + (2 * 101) + (1 * 102) = (3 * 1) + (2 * 10) + (1 * 100) =3+20+100
В результате сложения промежуточных сумм получаем число 123.
В применении этой формулы к двоичным числам, возможные значения к— О и 1 (максимальное значение'всегда на единицу меньше основания системы), а значение р равно 2 (т. е. 2 — основание системы). Если вам встретится двоичное число
1011 то, поместив его значения в это выражение, получим:
1о2° + 1,21 + Ог22 + 1з23 = (1 * 2°) + (1 * 21) + (0 * 22) + (1 * 23) = • (1 * 1) + (1 * 2) + (0 * 4) + (1 * 8) = 1 + 2 + 0 + 8 = 11
Читается как 11 десятичное или один-ноль-один-один как двоичное.
Двоичные числа используются в вычислительной технике потому, что на аппаратном уровне гораздо проще создать двухпозиционный цифровой переключатель, чем 10-позиционный. Проблемы возникают тогда, когда человеку и компьютеру приходится работать с одними и теми же числами. Это одна из многих причин того, почему системное программирование несколько сложнее.
Хотя вам для программирования в C++, безусловно, не обязательно знать методы преобразования из одной системы в другую, это иногда может оказаться полезным.
Уже упоминалось, что основанные на DOS архитектуры используют упакованные дату и время. Если нужно преобразовать элемент каталога из упакованного битового массива в форматированную строку, возможно, вам придется "поиграть" с битами.
Даты в файловой системе DOS (а, значит, и Windows 95) хранятся в виде целого 16-разрядного числа. Его раскладка выглядит следующим образом:
struct DOS_DATE {
unsigned int day:5;
// 25 = 32 — в месяце максимум 31 день ' unsigned int month:4;
// 24 = 16 — достаточно .для записи 12 месяцев unsigned int year:7;
// 27 = 128 — отсчет идет с 1980 года (год появления ПК)