(C/C++學習)17.bitset(位操作)


說明:bitset 就像 vector 一樣,是 C++ 的一個類模板庫,用來對一個數的二進制位進行管理、判斷等操作,使用時需要包含頭文件 #include<bitset>。

 

1.聲明及定義

格式:bitset<N> var(M)

其中 var 為 bitset 的類對象,N 表示該對象所占的位數,這里的位數指的是二進制。M 指的是 var 的初始值,可以是十六進制也可以是十進制,甚至還可以是 0-1 字符串。

  1     string str("11111");
  2     bitset<10> a(10);
  3     //將a初始化為000001010
  4     bitset<10> e(0xff);
  5     //將e的后8位初始化為1
  6     bitset<10> f(str);
  7     //將f的后5位初始化為1
  8     bitset<10> d;
  9     //無參數時每位都初始化為0

 

2.位操作成員函數

1.text(pos)   

功能:測試 pos 為是否為1,是返回 1,不是返回 0。

2.any()

功能:測試所有位是否為 0 ,是返回0,不是返回1。

3.none()

功能:測試是否所有位為 0 ,是返回1,不是返回0.

4.count()

功能:統計位為 1 的個數並返回。

5.size()

功能:求取對象的大小(這里指的是位數)並返回。

6.flip(pos)

功能:將 pos 為翻轉,即 0-1 變換,當無參時,則翻轉所有位。

7.set(pos)

功能:將 pos 位置 1,當無參時,將所有位置 1 。

8.reset(pos)

功能:將 pos 為置 0 ,當無參時則將所有位置 0 。

 

示例:

  1     bitset<10> a(10);
  2     cout<<a<<endl;
  3     cout<<a.test(1)<<endl;
  4     cout<<a.any()<<endl;
  5     cout<<a.none()<<endl;
  6     cout<<a.count()<<endl;
  7     cout<<a.size()<<endl;
  8     a.set();
  9     cout<<a<<endl;
 10     a.reset();
 11     cout<<a<<endl;
 12     a.flip();
 13     cout<<a<<endl;

程序運行結果:

  1 0000001010
  2 1
  3 1
  4 0
  5 2
  6 10
  7 1111111111
  8 0000000000
  9 1111111111

 

值得注意的是:對某個對象的位可以像數組那樣進行下標訪問,並且還可以修改其 0-1 標志,如下修改對象的第 6 位並分別打印出各位:

  1     bitset<10> a(10);
  2     a[5] = 1;
  3     for(int i = 0;i<10;i++)
  4         cout<<a[i]<<"";

 

3.轉換成員函數

bitset 對一個數進行了二進制位的操作,即將某個數轉換成了二進制形式,並對二進制的某些位進行了操作(還有 0-1 字符串),那么如果我們需要用到修改了某個二進制位的數(0-1字符串)時,則需要通過轉換函數來實現。

1.to_ulong()

功能:將對象以 unsigned long 類型返回,若對象經過了位操作函數的修改,則返回修改后的值。

2.to_string()

功能:將對象以 0-1 字符串的形式返回,若對象經過了修改,則返回修改后的值。如下代碼輸出為:10    0000001010 。

  1     bitset<10> a(10);
  2     int data = a.to_ulong();
  3     string str = a.to_string();
  4     cout<<data<<""<<str;

 

注意:bitset 對象只接受整型數據,如果初始化一個帶有小數的數時,將自動截斷,取整數部分進行操作。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM