|
Программирование >> Операторы преобразования типа
cont/bitset2.cpp #include <b1t5et> #include <iostream> Iinclude <5tring> Iinclude <l1m1ts> using namespace std: int main О /* Вывод чисел в двоичном представлении */ cout 267 as binary short: bit5et<numerlc limits<un5lgned short>::digit5>(267) endl: cout 267 as binary long: bitset<numeric lim1t5<un5igned long>::digits>C267) endl: cout 10.000,000 with 24 bits: bitset<24>(le7) endl: /* Преобразование двоичного представления в целое число */ cout \ 1000101011\ as number: bitset<100>(5tring( 1000101011 )).to ulong() endl: В зависимости от разрядности типов short и long примерный результат выглядит так: 267 as binary short: 0000000100001011 267 as binary long: 00000000000000000000000100001011 10.000.000 with 24 bits: lOOllOOOlOOlOllOlOOOOOOO 1000101011 as number: 555 В этом примере следующая конструкция преобразует число 267 в битовое поле, количество битов в котором определяется числом типа unsigned short (числовые пределы описаны на с. 72): bit5et<numer1c limits<un5lgned short>::digits>(267) Оператор вывода bitset выводит содержимое битового поля в виде последовательности нулей и единиц. Аналогично, представленная ниже конструкция преобразует серию двоичных цифр в битовое ноле, которое преобразуется в целое число вызовом to ulong(): bitset<100>(string( 1000101011 )) Отметьте необходимость явного преобразования исходного значения к типу string. Вероятно, это объясняется ошибкой в стандарте, поскольку в ранних версиях стандарта допускалось использование конструкций вида bitsetd( 10001010H ). При преобразовании конструктора в шаблон для разных строковых типов этот механизм автоматического преобразования типа был случайно утрачен. В настоящее время рассматривается предложение по исправлению этой ошибки. Обратите внимание: количество битов в битовом поле должно быть меньше sizeof(unsigned long). Если значение битового поля не может быть представлено в виде unsigned long, генерируется исключение. Строение класса bitset Ниже перечислены операции, поддерживаемые классом bitset Операции создания, копирования и уничтожения Для битовых полей определено несколько специальных конструкторов. С другой стороны, для них не определены специальный копируюш;ий конструктор, оператор присваивания и деструктор. Это означает, что присваивание и копирование битовых полей производится стандартными операциями поразрядного копирования. bit5et<pa3wep>::bitset () О Конструктор по умолчанию О Создает битовое поле, в котором все биты инициализированы нулями. О Пример: bitset<50> flags; Флаги: 0000...000000 Всего 50 нулевых битов bit5et<p(3jwep>::bitset (unsigned long value) О Создает битовое поле и инициализирует его битами целочисленного значения value. О Если количество битов в value слишком мало, недостающие начальные биты инициализируются нулями. О Пример: bit5et<50> flags(7); Флаги: 0000..,000111 explicit b1tset<pajMep>::bit5et (const 5tring& str) bitset<размер>: :bitset (const string str. string: :size type strjdx) bit5et<pdJMep>::bitset (const string, str. strmg: :5lze type strjdx. stry/?g:: size type str num) О Все формы возвращают битовое поле, инициализировщшос строкой 5г.или входящей в нее подстрокой. Вероятно, это объясняется ошибкой в стандарте, поскольку в ранних версиях стандарта допускалось использование конструкций вида bitset2 flags( 1010101 ). При преобразовании конструктора в шаблон для разных строковых типов этот механизм автоматического преобразования типа был случайн утрачен. В настоящее время рассматривается предложение по исправлению этой ошибки. О Строка или подстрока может содержать только символы 0s> и 1 . О Параметр str idx определяет индекс первого символа str, используемого дяя инициализации. О Если параметр str num не задан, используются все символы от позиции strjdx до конца строки. О Если количество символов в строке или подстроке меньше необходимого, начальные биты инициализируются нулями. О Если количество символов в строке или подстроке больше необходимого, лишние символы игнорируются. О Если выполняется условие str idx>str.size(), генерируется исключение out of range. О Если хотя бы один символ отличен от О и 1 , генерируется исключение invalid argument. О Обратите внимание: конструктор объявлен в виде шаблонной функции класса (см. с. 28), из-за чего отсутствует неявное преобразование типа первого параметра из const char* в string. О Пример: bit5et<50> flagsCstringClOlOlOl )): Флаги: 0000.. .0001010101 bitset<50> flags(stringC 1111000 )): Флаги: 0000...0000000110 Немодифицирующие операции size t bit5et<pajwep>::slze С) const Возвращает количество битов (то есть размер). size t bitset<pa3Mep>::count С) const Возвращает количество установленных битов (то есть битов со значением 1). bool bit5et<pdjMep>::апу () const Проверяет наличие хотя бы одного установленного бита, bool b1tset<p<?jwep>: :попе О const Проверяет отсутствие хотя бы одного установленного бита, bool bitset<pajwep>::test (size t idx) const О Проверяет установку бита в позиции idx. О Если выполняется условие idx>=size(), генерируется исключение out of range.
|
© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |