C++ за 21 день седьмое издание



Download 1,38 Mb.
bet391/437
Sana22.02.2022
Hajmi1,38 Mb.
#89455
TuriРеферат
1   ...   387   388   389   390   391   392   393   394   ...   437
Bog'liq
word1

operator»

Cout «

fourBits;




Передает строку в объект класса bitset

operators

"0101" »

fourBits;

Выполняет побитовую операцию AND

operator|

bitset <4>

result

(fourBitsl & fourBits2);

Выполняет побитовую операцию OR

operatorA

bitwise

<4>

result

(fourBitsl | fourBits2);

Выполняет побитовую операцию XOR

operator^

bitwise

<4>

result

(fourBitsl А fourBits2);

Выполняет побитовую операцию NOT

operator»=

bitwise

<4>

result

(^fourBitsl);

Выполняет бинарный оператор сдвига вправо

operator«=

fourBits

» =

(2);

// Сдвиг на два бита вправо

Выполняет бинарный оператор сдвига влево

operator [N]

fourBits

« =

(2) ; // Сдвиг на два бита влево

Возвращ ает ссылку на бит номер N в последовательности




fourBits

[2]

=0;

// установить третий бит в 0




bool bNum = fourBits [2]; // читать третий бит

В дополнение к ним класс s t d : : b i t s e t предоставляет такие операторы, как | =, &=, л= и ~=, позволяющие выполнять бинарные операции.




Методы класса std: :bitset

Биты могут находиться в двух состояниях: они либо установлены (1), либо сброшены (0). Для манипулирования содержимым набора битов можно воспользоваться функциями-членами класса b i t s e t (табл. 25.2), позволяющими работать с некоторыми или со всеми битами в наборе.


Т А Б Л И Ц А 2 5 .2 . Методы класса std::bitset





Оператор


Set


s e t ( N , val=l)


Reset


reset (N)


Описание

Устанавливает все биты последовательности в 1




fourBits.set (); // теперь набор содержит: '1111'

Устанавливает в бит номер означение val (по умолчанию 1)




fourBits.set (2, 0); // установить третий бит в 0

Сбрасы вает все биты последовательности в 0




fourBits.reset (); // теперь набор содержит: '0000'

Сбрасывает бит номер N




fourBits.reset (2); // теперь третий бит 0



Оператор


Flip


Size


Count



Использование класса std::bitset и его членов

565



Окончание табл. 25.2


Описание

Инвертирует все биты последовательности




fourBits.flip (); // 0101 измененилось на 1010

Возвращ ает количество битов последовательности




size_t NumBits = fourBits.size О; // возвращает 4

Возвращ ает количество установленных битов




size_t NumBitsSet = fourBits.count ();


size t NumBitsReset = fourBits.size () - fourBits.count ()

Применение этих методов и операторов демонстрирует листинг 25.2.




ЛИСТИНГ 25.2. Логические операции с набором битов



  1. #include




  1. #include

2 : #include
3:

  1. int main ()




  1. {

6 : using namespace std;

  1. bitset <8> inputBits;

    8:

    cout

    «

    "Enter

    a

    8-bit sequence: ";




    9:

    cin

    »

    inputBits;

    // сохранить пользовательский

    1 0 :

    1 1 :













    //

    ввод в наборе

    битов

    cout

    «

    "Number

    of Is

    you supplied:

    " « inputBits.count ()

    1 2 :

    1. endl;




  1. cout « "Number of Os you supplied: ";




  1. cout « inputBits.size () - inputBits.count () « endl;








  1. bitset <8> inputFlipped (inputBits); // копирование

    17:

    inputFlipped.flip

    ();

    // инверсия

    битов

    18:

    cout

    «

    "Flipped version

    is: " « inputFlipped

    «

    endl;

    19:

    2 0 :

    cout

    «

    "Result of AND,

    OR and XOR between the

    two:" « endl;

    2 1 :

    2 2 :

    cout

    «

    inputBits

    « " & " « inputFlipped «

    " =

    ";

  2. cout « (inputBits & inputFlipped) « endl; // побитовое AND








  1. cout « inputBits « " | " « inputFlipped « " = ";



26: cout « (inputBits | inputFlipped) « endl; // побитовое OR


27:



  1. cout « inputBits « " л " « inputFlipped « " = ";




  1. cout « (inputBits л inputFlipped) « endl; // побитовое XOR








  1. return 0;




  1. }

566 ЗАНЯТИЕ25.Работасбитовымифлагамиприиспользованиибиблиотеки5Т1-


Результат


Enter a 8-bit sequence: 10110101


Number of Is you supplied: 5


Number of Os you supplied: 3


Flipped version is: 01001010


Result of AND, OR and XOR between the two:

10110101 & 01001010 = 00000000


10110101 | 01001010 = 11111111


10110101 A 01001010 = 11111111




Анализ

Эта интерактивная программа демонстрирует не только простые бинарные операции между двумя последовательностями битов с использованием класса s t d : i b i t s e t , но и удобство его потоковых операторов. Операторы сдвига ( » и « ) , реализованные клас­ сом s t d : : b i t s e t , позволяют записывать последовательности битов на экран и читать небольшие последовательности, введенные пользователем в командной строке. Набор би­ тов i n p u t B i t s получает введенную пользователем последовательность (строка 10). И с­ пользуемый в строке 12 метод c o u n t () сообщает количество единиц в последовательно­ сти, а количество нулей вычисляется как разница между результатами выполнения метода s i z e (), возвращающего количество битов в наборе битов, и метода c o u n t (), как показа­ но в строке 14. Набор битов in p u tF lip p e d , изначально копия набора битов in p u t B i t s , впоследствии инвертируется с использованием метода f l i p () в строке 17. Теперь он со­ держит последовательность инвертированных битов, т.е. нули стали единицами, а едини­ цы нулями. Остальная часть программы демонстрирует результат побитовых операций AND, OR и XOR между этими двумя наборами битов.


Одним из недостатков шаблона класса bitseto библиотеки STL является его неспособность изменять свои размеры динамически. Вы можете использовать класс bitset только там, где количество хранимых в последовательности би­ тов известно во время компиляции.

Библиотека STL снабжает программиста классом vector (называе­ мым также bit_vector в некоторых реализациях библиотеки STL), который преодолевает этот недостаток.


Класс vector

Класс v e c to r < b o o l> является частичной специализацией класса s t d : : v e c to r , пред­ назначенной для хранения логических данных. Этот класс в состоянии динамически из­ мерить свой размер. Поэтому программист может не заботиться о количестве логических флагов во время компиляции.


СОВЕТ Чтобы использовать класс std:: ector, включите его заголовок:




#include

Класс vector

567



Создание экземпляра класса vector

Экземпляр класса v e c to r < b o o l> создается подобно вектору:




vector vecBooll;

Например, можно создать вектор с 10 логическими значениями, для начала инициали­ зированных значением 1 (т.е. tr u e ) :




vector vecBool2 (10, true);

Вы можете также создать объект как копию другого:




vector vecBool2Copy (vecBool2);

Некоторые из способов создания экземпляра класса v e c to r < b o o l> представлены в листинге 25.3.




ЛИСТИНГ 2S.3. Создание экземпляра класса vector< bool> ________________________________



  1. #include

1:


  1. int main ()




  1. {

  2. using namespace std;








  1. // Создать экземпляр объекта, используя стандартный конструктор




  1. vector vecBooll;

  2. :




    1. // Инициализировать вектор из 10 элементов значением true



10: vector vecBool2 (10, true);
1 1 :

  1. // Создать экземпляр объекта как копию другого



13: vector vecBool2Copy (vecBool2);


14:



  1. return 0;




  1. }



Анализ

Этот пример демонстрирует некоторые из способов создания объекта класса v e c to r< b o o l> . В строке 7 используется стандартный конструктор. В строке 10 показано создание объекта, который изначально содержит 10 логических флагов, инициализирован­ ных значением t r u e . Строка 13 демонстрирует, как один объект класса v e c to r < b o o l> может быть создан как копия другого.


Функции и операторы класса vector

Класс v e c to r< b o o l> предоставляет функцию f l i p (), которая инвертирует состояние логических значений в последовательности, подобно функции b i t s e t o : : f l i p ().





  1. остальном этот класс очень похож на класс s t d : : v e c t o r в том смысле, что можно применить функцию p u sh _ b a c k () к флагам последовательности. Пример в листинге 25.4 демонстрирует применение этого класса в подробностях.

568 ЗАНЯТИЕ25.Работасбитовымифлагамиприиспользованиибиблиотеки8И


ЛИСТИНГ 25.4. Использование класса vector__________________________






  1. Download 1,38 Mb.

    Do'stlaringiz bilan baham:
1   ...   387   388   389   390   391   392   393   394   ...   437




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish