Инициализация переменных двоичным числом - C (СИ)
Формулировка задачи:
Возник такой вопрос.
Как известно: a - десятичное число, b - восьмеричное, c - шестнадцатиричное.
А каким образом можно инициализировать переменную двоичным числом и числом в какой-нибудь иной системе счисления?
int a = 10;
int b = 010;
int c = 0x10;
Решение задачи: «Инициализация переменных двоичным числом»
textual
Листинг программы
template<unsigned long N> struct Byte { enum{value = (N % 10) | (2 * Byte<N/10 >::value)}; }; template <> struct Byte<0> { enum {value = 0}; }; template <unsigned long Byte1, unsigned long Byte2> struct Word { enum{value = (Byte<Byte1>::value<<8) | Byte<Byte2>::value}; }; template<unsigned long Byte1, unsigned long Byte2, unsigned long Byte3, unsigned long Byte4> struct Dword { enum{value = (Word<Byte1, Byte2>::value <<16) | Word<Byte3, Byte4>::value}; }; void Foo() // Пример использования { std::cout << Word<1010101, 10101010>::value << std::endl; // Начинать число с ноликов нельзя }
Объяснение кода листинга программы
Код представляет собой шаблонную структуру для работы с двоичными числами.
Byte<N>
- это шаблонная структура, которая представляет собой двоичное число, в зависимости от значенияN
. Значение двоичного числа определяется вenum
, где используются операции побитового И (|
) и сдвига (<<
).Word<Byte1, Byte2>
- это шаблонная структура, которая представляет собой слово (16-битное число), состоящее из двух байтов. Значение слова определяется вenum
, где используется операция побитового И (<<
) и операция объединения (|
).Dword<Byte1, Byte2, Byte3, Byte4>
- это шаблонная структура, которая представляет собой двойное слово (32-битное число), состоящее из четырех слов. Значение двойного слова определяется вenum
, где используется операция побитового И (<<
) и операция объединения (|
).- В функции
Foo()
используется структураWord<1010101, 10101010>::value
, чтобы вывести на экран двоичное представление числа. Это число будет выводиться в двоичной системе счисления, начиная с единицы, потому что двоичное число начинается с единицы, а не с нуля.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д