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 года (год появления ПК)