LINUX.ORG.RU

Нельзя. Самое тупое решение проблемы, которое приходит на ум -

#define BIN(x7,x6,x5,x4,x3,x2,x1,x0) ((x7 <<7)|(x6 <<6)|....|x0)

эх коряво =), зато расширяемо до произвольной разрядности. хоть до 32-х.

#define BIN_8bit(x) ( (x&1)?1:0 +(x&8)?2:0+(x&64)?4:0......)

тут х ограничено максимальным целым значением. (x - записывается в восьмиричной системе. Например, 01 011 01000 )

или если небольшой диапазон чисел

const unsigned int b000 = 0; const unsigned int b001 = 1; const unsigned int b010 = 2; ... const unsigned int b111 = 7;

Ничего другого из "компайл-тайм" сразу на ум не приходит. Решения в рантайме очевидны.

ukez
()
Ответ на: комментарий от ban

Кто бы спорил.

Зато можно извратиться и написать макрос, который на этапе компиляции тебе BIN(101) переведёт в 5. Если число 101 не слишком большое :) Для однобайтных точно хватит. Для 4-байтных можно извратиться ещё сильнее и написать макрос типа BIN(10101010, 01010101, 10011001, 01100110).

Teak ★★★★★
()
Ответ на: комментарий от ukez

Опередил, гад :)

Зато я для четырёхбайтных нормальный костыль указал :)

Teak ★★★★★
()
Ответ на: комментарий от ban

Хм... А по мне так - пофиг. Шестнадцатеричная в двоичную любой разрядности переводится элементарнейше в уме, как и восьмеричная.

watashiwa_daredeska ★★★★
()

2ban :

Периодически тут всплывающий вопрос...

Помнится, предлагалось даже так проблему решить:

#define _00000000 0 
#define _00000001 1 
... 
#define _11111111 255 

(я тогда предложил "до кучи", чтобы таблицу умножения 
не запоминать, такой .h файл налабать:
#define _2x2 4 
#define _2x3 6 
etc.)

Учи шестнадцатиричную таблицу! Она -- меньше, чем таблица 
умножения, которою даже дети одолевают...



Die-Hard ★★★★★
()
Ответ на: комментарий от Die-Hard

> я тогда предложил "до кучи", чтобы таблицу умножения не запоминать, такой .h файл налабать

Афтор, жжошь :) Реально повеселил, спасибо.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.