Программирование >>  Операторы преобразования типа 

1 ... 140 141 142 [ 143 ] 144 145 146 ... 239


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.



1 ... 140 141 142 [ 143 ] 144 145 146 ... 239

© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика