【发布时间】:2011-01-11 17:47:36
【问题描述】:
我正在做一些需要我访问特定位和位范围的事情。我决定使用 bitset,因为它很容易访问特定的位;如何提取位范围(子集)?
【问题讨论】:
-
您可能想接受给出的答案。
标签: c++ bitset std-bitset
我正在做一些需要我访问特定位和位范围的事情。我决定使用 bitset,因为它很容易访问特定的位;如何提取位范围(子集)?
【问题讨论】:
标签: c++ bitset std-bitset
方法一:
return (the_bitset >> start_bit).to_ulong();
方法 B(在我的机器上比方法 A 快 100 倍):
unsigned long mask = 1;
unsigned long result = 0;
for (size_t i = start_bit; i < end_bit; ++ i) {
if (the_bitset.test(i))
result |= mask;
mask <<= 1;
}
return result;
【讨论】:
operator[] 应该更快,因为在test() 中没有边界检查。