[英]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.