Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: запись двоичного числа в языке СИ
Форум разработчиков электроники ELECTRONIX.ru > Cистемный уровень проектирования > Операционные системы > Программирование
buletz
HEX (16-ричный) формат записи числа 255 (DEC) делается так:
0xFF

а как записать его в двоичном, чтобы понял компилятор СИ?

на PIC-ах было так:
0b11111111

сейчас пишу под ARM-7 , компилятор IAR
он такой записи не понимает
помогите
Andy Mozzhevilov
Цитата(asdjkasdjkalsdjkl @ Feb 19 2007, 12:41) *
HEX (16-ричный) формат записи числа 255 (DEC) делается так:
0xFF

а как записать его в двоичном, чтобы понял компилятор СИ?

на PIC-ах было так:
0b11111111

сейчас пишу под ARM-7 , компилятор IAR
он такой записи не понимает
помогите


В стандарте С не предусмотрен двоичный формат записи
buletz
может быть у кого-нибудь есть какие-нибудь готовые макросы для этого дела ?
Alex B._
Есть, но лучше все-таки ими не пользоваться...

Код
    /*  -------------------------------------------------------------------------
     *  Binary constant macros by Tom Torfs (tomtorfs@village.uunet.be)
     *  Sample usage:
     *  B8(01010101) = 85
     *  B16(10101010,01010101) = 43605
     *  B32(10000000,11111111,10101010,01010101) = 2164238933
     */

#define HEX__(n) 0x##n##LU

#define B8__(x) ((x & 0x0000000FLU) ?   1 : 0)\
               +((x & 0x000000F0LU) ?   2 : 0)\
               +((x & 0x00000F00LU) ?   4 : 0)\
               +((x & 0x0000F000LU) ?   8 : 0)\
               +((x & 0x000F0000LU) ?  16 : 0)\
               +((x & 0x00F00000LU) ?  32 : 0)\
               +((x & 0x0F000000LU) ?  64 : 0)\
               +((x & 0xF0000000LU) ? 128 : 0)

#define B8(d)                   ((unsigned char)B8__(HEX__(d)))
#define B16(dmsb,dlsb)          (((unsigned short)B8(dmsb) <<  8) + B8(dlsb))
#define B32(dmsb,db2,db3,dlsb)  (((unsigned long)B8(dmsb)  << 24) \
                               + ((unsigned long)B8(db2)   << 16) \
                               + ((unsigned long)B8(db3)   <<  8) \
                               + B8(dlsb))


только типы своего компилера проверьте
Misa
На самом деле использование бинарных изображений чисел не очень удобно. Гораздо удобнее Hex изображения.
Смотря для каких целей вы хотите его использовать.
Почитайте руководство на IAR СИ компилятор там есть механизмы
для работы с битами.
Сергей Борщ
Цитата(Misa @ Feb 20 2007, 15:43) *
На самом деле использование бинарных изображений чисел не очень удобно. Гораздо удобнее Hex изображения.
На самом деле двоичная запись удобна только в одном случае - при программировании знакогенератора. А в остальных случаях удобнее и нагляднее мнемоническая запись: http://electronix.ru/forum/index.php?showt...mp;#entry203047
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.