реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> запись двоичного числа в языке СИ, как ??
buletz
сообщение Feb 19 2007, 10:41
Сообщение #1


Участник
*

Группа: Свой
Сообщений: 52
Регистрация: 4-07-06
Из: Moscow
Пользователь №: 18 554



HEX (16-ричный) формат записи числа 255 (DEC) делается так:
0xFF

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

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

сейчас пишу под ARM-7 , компилятор IAR
он такой записи не понимает
помогите
Go to the top of the page
 
+Quote Post
Andy Mozzhevilov
сообщение Feb 19 2007, 10:48
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 877
Регистрация: 26-01-05
Из: Екатеринбург
Пользователь №: 2 206



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

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

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

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


В стандарте С не предусмотрен двоичный формат записи


--------------------
Пасу котов...
Go to the top of the page
 
+Quote Post
buletz
сообщение Feb 19 2007, 10:51
Сообщение #3


Участник
*

Группа: Свой
Сообщений: 52
Регистрация: 4-07-06
Из: Moscow
Пользователь №: 18 554



может быть у кого-нибудь есть какие-нибудь готовые макросы для этого дела ?
Go to the top of the page
 
+Quote Post
Alex B._
сообщение Feb 19 2007, 12:16
Сообщение #4


Знающий
****

Группа: Свой
Сообщений: 943
Регистрация: 6-07-04
Из: Санкт-Петербург
Пользователь №: 274



Есть, но лучше все-таки ими не пользоваться...

Код
    /*  -------------------------------------------------------------------------
     *  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))


только типы своего компилера проверьте
Go to the top of the page
 
+Quote Post
Misa
сообщение Feb 20 2007, 16:43
Сообщение #5


Участник
*

Группа: Свой
Сообщений: 35
Регистрация: 25-04-06
Пользователь №: 16 458



На самом деле использование бинарных изображений чисел не очень удобно. Гораздо удобнее Hex изображения.
Смотря для каких целей вы хотите его использовать.
Почитайте руководство на IAR СИ компилятор там есть механизмы
для работы с битами.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Feb 20 2007, 17:07
Сообщение #6


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(Misa @ Feb 20 2007, 15:43) *
На самом деле использование бинарных изображений чисел не очень удобно. Гораздо удобнее Hex изображения.
На самом деле двоичная запись удобна только в одном случае - при программировании знакогенератора. А в остальных случаях удобнее и нагляднее мнемоническая запись: http://electronix.ru/forum/index.php?showt...mp;#entry203047


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 12th July 2025 - 22:22
Рейтинг@Mail.ru


Страница сгенерированна за 0.01374 секунд с 7
ELECTRONIX ©2004-2016