Closed1

AtCoder C++入門の覚え書き #3-2 bit演算

こどはざこどはざ

bitset

数値やbitset型の値はビット演算が出来る。
(数値 or bitset) << 1 左に1列シフト。1列でも値は省略不可。

bitset<4> b1("1111"); // "1111"
bitest<4> b2(15); // "1111"
int i = 16 << 1; // 15 (1111から1列左シフトして1110になるため

bit演算子

bitset<4> b1("1010");
bitset<4> b2("0110");

cout << (b1 & b2) << endl; // AND: "0010";
cout << (b1 | b2) << endl; // OR:  "1110";
cout << (b1 ^ b2) << endl; // XOR: "1100";
cout << ~b1 << endl;       // NOT: "0101";

bitsetのメソッド

bitset<4> b("1010");
cout << b.test(0) << endl;   // false. index 0(左から数えて0+1番目)の値が0のため
cout << b.set(2, 1) << endl; // b: "1110". 1をセットするなら第二引数省略可能
cout << b.flip() << endl;    // "1110" -> "0001"
cout << b.set() << endl;     // "1111"
cout << b.reset() << endl;   // "0000"

b = 5;                     // "0101";
cout << b.all() << endl;   // false
cout << b.any() << endl;   // true
cout << b.count() << endl; // 2

string s = b.to_string(); // string: "0101"
int i = b.to_ullong(); // int: 5. 値は unsigned long long として返されてintにキャストされている

補足: b[i] は出来るが b.at(i) は存在しない。

このスクラップは2023/10/11にクローズされました