#define BIN8(x) BIN___(0##x)
#define BIN___(x) \
( \
((x / 01ul) % 010)*(2>>1) + \
((x / 010ul) % 010)*(2<<0) + \
((x / 0100ul) % 010)*(2<<1) + \
((x / 01000ul) % 010)*(2<<2) + \
((x / 010000ul) % 010)*(2<<3) + \
((x / 0100000ul) % 010)*(2<<4) + \
((x / 01000000ul) % 010)*(2<<5) + \
((x / 010000000ul) % 010)*(2<<6) \
)
#define BIN16(x1,x2) \
((BIN(x1)<<8)+BIN(x2))
#define BIN24(x1,x2,x3) \
((BIN(x1)<<16)+(BIN(x2)<<8)+BIN(x3))
#define BIN32(x1,x2,x3,x4) \
((BIN(x1)<<24)+(BIN(x2)<<16)+(BIN(x3)<<8)+BIN(x4))
Для компиляторов, поддерживающих 64-разрядные целые, можно также ввести дополнительный макрос BIN64. Для Visual C++ он будет выглядеть так.
#define BIN64(x1,x2,x3,x4,x5,x6,x7,x8) \
((__int64(BIN32(x1,x2,x3,x4)) << 32) + __int64(BIN32(x5,x6,x7,x8)))
Обратите внимание, что к параметру макроса BIN8при помощи оператора ## принудительно дописывается ведущий ноль, чтобы с ним можно было работать как с восьмеричной константой. Благодаря этому пользователь может смело применять макрос BIN8как к числу с ведущими нулями, так и без них, и всё будет работать именно так, как он ожидает.
Использовать наши макросы можно примерно так.
char i1 = BIN8(101010);
short i2 = BIN16(10110110, 11101110);
long i3 = BIN24(10110111, 00010111, 01000110);
long i4 = BIN32(11101101, 01101000, 01010010, 10111100);
Самое замечательное состоит в том, что, хотя выражения для пересчёта из десятичной системы в двоичную получаются очень громоздкими, они остаются константными, а значит будут вычисляться в процессе компиляции. Это, в частности, означает, что наши двоичные числа можно использовать везде, где требуется константа (для задания размера массива, в метках caseоператора switch, для указания ширины битового поля и т. д.).
Реализация макроса BIN8, показанная выше, достаточно прямолинейна. Этот же макрос можно реализовать более элегантными способами. Например, вот вариант, предложенный Игорем Ширкалиным.
#define BIN__N(x) (x) | x>>3 | x>>6 | x>>9
#define BIN__B(x) (x) & 0xf | (x)>>12 & 0xf0
#define BIN8(v) (BIN__B(BIN__N(0x##v)))
До встречи через неделю!
Алекс Jenter jenter@rsdn.ru Duisburg, 2001. Публикуемые в рассылке материалы принадлежат сайту RSDN.
Программирование на Visual C++
Выпуск №58 от 30 декабря 2001 г.
Здравствуйте, дорогие друзья!
Сердечно поздравляю вас всех с наступающим Новым Годом!Пусть он принесет вам как можно больше успехов и радости, откроет новые горизонты и пусть лучезарное настроение никогда вас не покидает! Оно ведь вам особенно необходимо, когда вы например отслеживаете сорок шестую ошибку в программе… ;-)
Но одним поздравлением я сегодня все-таки не ограничусь :-) Cначала хочу внести ясность: предыдущему выпуску номер "58" был присвоен случайно и вне очереди, т.к. на самом деле он только пятьдесят седьмой. В архиве он за этим номером и стоит, так что просьба не искать потерявшийся 57-ой выпуск. ;-)
Cегодня я хочу представить вашему вниманию очень интересную, на мой взгляд, статью Владислава Чистякова из журнала "Технология Клиент-Сервер". Статья посвящена перспективам, ждущих нас уже в совсем недалеком будущем. Как вы вероятно уже знаете, входящая в платформу .NET Common Language Runtime (CLR) призвана поднять переносимость создаваемых приложений на новый уровень. Но давайте не будем забегать вперед…
СТАТЬЯ
CLR
Common Language Runtime
Автор: Владислав Чистяков
Источник: <���Технология Клиент-Сервер>
Прежде чем начинать говорить про VS.Net, необходимо поговорить про .Net и про рекламу в общем. Что же такое .Net и зачем он нужен?
Вы, наверное, заметили, что чем больше Интернет проникает в массы, тем больше нечестного использования этого названия встречается. Например: "Новый процессор Pentium 4 позволит поднять на НОВЫЙ уровень ваши возможности в Интернет". Интересно, ведь если даже у счастливого обладателя этого процессора будет возможность смотреть видеоролик в режиме 1900×1600 (хотя, хоть убей не пойму, как это зависит от процессора?), то где он возьмет канал в Интернет, который даст ему возможность прокачать этот ролик (ну, хотя бы с приемлемым качеством в разрешении 320×240). Но слово магическое – ИНТЕРНЕТ! Всунул его в свой пресс-релиз и порядок, продажи обеспечены.
Никуда не делся от этого искушения и Microsoft. Все без исключения продукты этого производителя будут теперь иметь суффикс – «.Net».
Неважно, на сколько процентов продукт предназначен для Интернет. Можно сказать больше – в марку .Net вкладывается столько денег, что в один прекрасный день, чтобы объяснить молодому специалисту, что такое Интернет, ему скажут: "Интернет – это инфраструктура, предназначенная для запуска приложений и сервисов .Net". Вы думаете, я утрирую или шучу. Нисколько. Буквально за день, до того как сесть писать эту статью я слышал как ведущий радиостанции, по-моему, РДВ, заявил: "как хорошо все-таки, что Билл Гейтс придумал Интернет, а то я бы не смог получать ваши электронные письма…".
Читать дальше