Namespaces
Variants

std::bitset<N>:: bitset

From cppreference.net
Utilities library
bitset ( ) ;
(1) (C++11以降 noexcept)
(C++11以降 constexpr)
(2)
bitset ( unsigned long val ) ;
(C++11まで)
constexpr bitset ( unsigned long long val ) noexcept ;
(C++11から)
template < class CharT, class Traits, class Alloc >

explicit bitset
( const std:: basic_string < CharT, Traits, Alloc > & str,
typename std:: basic_string
< CharT, Traits, Alloc > :: size_type pos = 0 ,
typename std:: basic_string < CharT, Traits, Alloc > :: size_type
n = std:: basic_string < CharT, Traits, Alloc > :: npos ,

CharT zero = CharT ( '0' ) , CharT one = CharT ( '1' ) ) ;
(3) (C++23以降 constexpr)
template < class CharT, class Traits >

constexpr explicit bitset
( std:: basic_string_view < CharT, Traits > str,
std:: size_t pos = 0 , std:: size_t n = std:: size_t ( - 1 ) ,

CharT zero = CharT ( '0' ) , CharT one = CharT ( '1' ) ) ;
(4) (C++26以降)
template < class CharT >

explicit bitset ( const CharT * str, std:: size_t n = std:: size_t ( - 1 ) ,

CharT zero = CharT ( '0' ) , CharT one = CharT ( '1' ) ) ;
(5) (C++11以降)
(C++23以降 constexpr)

いくつかのオプションデータソースの1つから新しいbitsetを構築します:

1) デフォルトコンストラクタ。すべてのビットがゼロに設定されたbitsetを構築します。
2) 符号なし整数 val からビットセットを構築します。
値表現のビット数を value representation unsigned long (C++11まで) unsigned long long (C++11以降) として S とする:
  • 最初の(右端、最下位) std:: min ( S, N ) ビット位置は val の対応するビット値で初期化される。
  • S N より小さい場合、残りのビット位置はゼロで初期化される。
3) str 内の文字を使用してビットセットを構築します。オプションで開始位置 pos と長さ n を指定でき、セットビット( one )とアンセットビット( zero )の代替値を示す文字も指定できます。 Traits::eq() は文字値を比較するために使用されます。
初期化文字列の有効な長さは std:: min ( n, str. size ( ) - pos ) です。
4) (3) と同様ですが、 std::basic_string_view の代わりに std::basic_string を使用します。
5) (3) と同様ですが、 const CharT * std::basic_string の代わりに使用します。

bitset ( n == std:: basic_string < CharT > :: npos
? std:: basic_string < CharT > ( str )
: std:: basic_string < CharT > ( str, n ) , 0 , n, zero, one )
と同等です。

(C++26まで)

bitset ( n == std:: basic_string_view < CharT > :: npos
? std:: basic_string_view < CharT > ( str )
: std:: basic_string_view < CharT > ( str, n ) , 0 , n, zero, one )
と同等です。

(C++26以降)

目次

翻訳の説明: - 「Contents」を「目次」に翻訳しました - HTMLタグ、属性、
タグ内のテキストは翻訳していません
- C++関連の専門用語(Parameters、Exceptions、Notes、Example、Defect reports、See also)は原文のまま保持しました
- 番号や構造は完全に保持されています
- フォーマットとレイアウトは元のまま維持されています

パラメータ

val - ビットセットの初期化に使用される数値
str - ビットセットの初期化に使用される文字列
pos - str 内の開始オフセット
n - str から使用する文字数
zero - str 内の未設定ビットの代替文字
one - str 内の設定ビットの代替文字

例外

3,4) std::out_of_range がスローされる条件: pos > str. size ( ) の場合、 std::invalid_argument がスローされる条件: いずれかの文字が one または zero でない場合。
翻訳のポイント: - HTMLタグ、属性、 タグ内のC++コードは完全に保持 - C++固有の用語(std::out_of_range, std::invalid_argument, pos, str.size(), one, zero)は翻訳せず保持 - 技術文書としての正確性と専門性を維持 - 自然な日本語の技術文書として読みやすいように文脈を補完(「がスローされる条件」を追加)
5) std::invalid_argument いずれかの文字が one または zero でない場合。

注記

機能テスト マクロ 標準 機能
__cpp_lib_constexpr_bitset 202207L (C++23) よりconstexprな std::bitset 、オーバーロード ( 3,5 )
__cpp_lib_bitset 202306L (C++26) std::bitset std::string_view の連携 ( 4 )

#include <bitset>
#include <climits>
#include <iostream>
#include <string>
int main()
{
    // 空コンストラクタ (1)
    std::bitset<8> b1; // [0,0,0,0,0,0,0,0]
    // unsigned long long コンストラクタ (2)
    std::bitset<8> b2(42);          // [0,0,1,0,1,0,1,0]
    std::bitset<70> bl(ULLONG_MAX); // C++11では [0,0,0,0,0,0,1,1,1,...,1,1,1]
    std::bitset<8> bs(0xfff0);      // [1,1,1,1,0,0,0,0]
    // 文字列コンストラクタ (3)
    std::string bit_string = "110010";
    std::bitset<8> b3(bit_string);       // [0,0,1,1,0,0,1,0]
    std::bitset<8> b4(bit_string, 2);    // [0,0,0,0,0,0,1,0]
    std::bitset<8> b5(bit_string, 2, 3); // [0,0,0,0,0,0,0,1]
    // カスタム0/1文字を使用する文字列コンストラクタ (3)
    std::string alpha_bit_string = "aBaaBBaB";
    std::bitset<8> b6(alpha_bit_string, 0, alpha_bit_string.size(),
                      'a', 'B');         // [0,1,0,0,1,1,0,1]
    // カスタム文字を使用するchar*コンストラクタ (5)
    std::bitset<8> b7("XXXXYYYY", 8, 'X', 'Y'); // [0,0,0,0,1,1,1,1]
    std::cout <<   "b1: " << b1 << "\nb2: " << b2 << "\nbl: " << bl
              << "\nbs: " << bs << "\nb3: " << b3 << "\nb4: " << b4
              << "\nb5: " << b5 << "\nb6: " << b6 << "\nb7: " << b7 << '\n';
}

出力例:

b1: 00000000
b2: 00101010
bl: 0000001111111111111111111111111111111111111111111111111111111111111111
bs: 11110000
b3: 00110010
b4: 00000010
b5: 00000001
b6: 01001101
b7: 00001111

欠陥報告

以下の動作変更の欠陥報告書は、以前に公開されたC++規格に対して遡及的に適用されました。

DR 適用対象 公開時の動作 修正後の動作
LWG 396 C++98 オーバーロード (3)
のゼロおよび1の文字の値が 0 および 1 であった
(これは '0' および '1' に対応しない)
これらの文字の値を
提供するパラメータを追加
LWG 457 C++98 オーバーロード (2) において S CHAR_BIT * sizeof ( unsigned long )
であったが、 unsigned long は値の表現に
すべてのビットを使用することが保証されていない
値表現のビット数を
考慮するように変更
LWG 2250 C++98 pos > str. size ( ) true の場合、動作は未定義であった この場合には常に
例外をスローする

関連項目

ビットを true または指定された値に設定
(公開メンバ関数)
ビットを false に設定
(公開メンバ関数)