boost.png (6897 bytes)整數位掩碼模板

<boost/integer/integer_mask.hpp> 中的類模板為特定的位元位置或特定大小的連續位元提供了位掩碼。掩碼常量的類型來自於 整數類型選擇模板 頭文件。

目錄

摘要

#include <cstddef>  // for std::size_t

namespace boost
{

template < std::size_t Bit >
struct high_bit_mask_t
{
    typedef implementation_supplied  least;
typedef implementation_supplied fast;

static const least high_bit = implementation_defined;
static const fast high_bit_fast = implementation_defined;

static const std::size_t bit_position = Bit;

};

template < std::size_t Bits >
struct low_bits_mask_t
{
typedef implementation_supplied least;
typedef implementation_supplied fast;

static const least sig_bits = implementation_defined;
static const fast sig_bits_fast = implementation_defined;

static const std::size_t bit_count = Bits;

};

// 針對 low_bits_mask_t 的特化,用於特定的位數

} // namespace boost

單位元掩碼類模板

boost::high_bit_mask_t 類模板提供了表示特定位置的單個位元的掩碼常數。該掩碼等於 2Bit, 其中 Bit 為模板參數。位元的位置必須是從零到 Max 的非負數字,其中 Max 最大的內建無符號整數類型所支持的位數減一。下表描述了 high_bit_mask_t 實例的成員。

boost::high_bit_mask_t 類模板的成員
成員 意義
least 支持給定位元位置的最小無符號內建類型
fast 快速操作的 least 類似物
high_bit 想要的位元掩碼的最小常數值
high_bit_fast high_bit 的快速類似物
bit_position 模板參數的值,可用於該類模板的改名實例

位元組掩碼類模板

boost::low_bits_mask_t 類模板提供了表示特定數量的最低位元的掩碼常數。該掩碼等於 (2Bits - 1), 其中 Bits 為模板參數。位元組中的位元數量必須是從零到 Max 的非負數字,其中 Max 最大的內建無符號整數類型所支持的位數。下表描述了 low_bits_mask_t 實例的成員。

boost::low_bits_mask_t 類模板的成員
成員 意義
least 支持給定位元數的最小無符號內建類型
fast 快速操作的 least 類似物
sig_bits 想要的位元掩碼的最小常數值
sig_bits_fast sig_bits 的快速類似物
bit_count 模板參數的值,可用於該類模板的改名實例

實現說明
如果 Bits 恰好為一個內建無符號類型的大小,該實現必須修改以防止未定義行為。因此,針對這些位元數對 low_bits_mask_t 進行特化。

例子

#include <boost/integer/integer_mask.hpp>

//...

int main()
{
typedef boost::high_bit_mask_t<29> mask1_type;
typedef boost::low_bits_mask_t<15> mask2_type;

mask1_type::least my_var1;
mask2_type::fast my_var2;
//...

my_var1 |= mask1_type::high_bit;
my_var2 &= mask2_type::sig_bits_fast;

//...
}

示範程序

程序 integer_mask_test.cpp 簡單地示範了對各種位元掩碼類模板例子的實例化結果。

原理

該頭文件中的類模板是 整數類型選擇類模板 的擴展。新的類模板提供了相同大小但更方便的掩碼,用於在所含內建類型包含更多位元時取出最高或所有重要位元。這防止了被更高位的無用位元污染。

鳴謝

The author of the Boost bit mask class templates is Daryle Walker.


Revised September 23, 2001

© Copyright Daryle Walker 2001. Permission to copy, use, modify, sell and distribute this document is granted provided this copyright notice appears in all copies. This document is provided "as is" without express or implied warranty, and with no claim as to its suitability for any purpose.