簡體   English   中英

整數到布爾數組由位組成,是c ++中最有效的方法嗎?

[英]integer to boolean array made of bits, most efficient way in c++?

我有一個有趣的小問題,我知道有多種方法可以給貓皮膚,但我想知道最好/最有效的方法是什么。

比方說,我有一個值為534的整數和一個可以存儲16個布爾值的數組

現在,534到二進制是10000010110

如何成為從534到達的最佳方式

array[0] = 0
array[1] = 1
array[2] = 1
array[3] = 0
array[4] = 1
....
array[15] = 0

提前致謝!

使用std::bitset<16>並調用operator[]來訪問各個位:

#include <iostream>
#include <bitset>

int main()
{
     std::bitset<16> bits(534);
     std::cout << bits << std::endl;

     //use operator[] to access individual bits
     std::cout << bits[2] << std::endl; 
}

輸出( 演示 ):

0000001000010110
1

這可能不是有效的,但如果您考慮安全性 ,那么它是原始數組類型的更好替代方案。 效率差異幾乎可以忽略不計。

如果在編譯時未知位數,並且可以在運行時知道,那么boost::dynamic_bitset將對您有所幫助。 看看它:

從它的文檔

dynamic_bitset類表示一組位。 它通過operator []提供對各個位值的訪問,並提供可以應用於內置整數的所有按位運算符,例如operator&和operator <<。 集合中的位數在運行時通過dynamic_bitset的構造函數的參數指定。

dynamic_bitset類幾乎與std :: bitset類相同。 不同之處在於dynamic_bitset的大小(位數)是在構造dynamic_bitset對象期間的運行時指定的,而std :: bitset的大小是在編譯時通過整數模板參數指定的。

像這樣:

for (unsigned int i = 0; i != 16; ++i)
{
  array[i] = n & 1;
  n /= 2;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM