ビット操作
Bit maskは複数のboolean optionをunsigned integerへまとめます。
ビット操作とは?
Bit maskは複数のboolean optionをunsigned integerへまとめます。
Flagをset、clear、toggle、testします。
重要なポイント
- 空、1要素、重複、ソート済み入力をテストします。
- 正しさと最適化を分けます。
- 実務ではstandard libraryを優先します。
CとC++のコード例
C
main.c
#include <stdio.h>
int main(void) {
unsigned flags = 0;
flags |= 1u << 1;
flags |= 1u << 3;
flags ^= 1u << 1;
printf("flags=%u bit3=%u\n", flags, (flags >> 3) & 1u);
}
flags=8 bit3=1
C++
main.cpp
#include <bitset>
#include <iostream>
int main() {
std::bitset<4> flags;
flags.set(1);
flags.set(3);
flags.flip(1);
std::cout << "flags=" << flags
<< " bit3=" << flags.test(3) << '\n';
}
flags=1000 bit3=1
CとC++の比較
予測可能なshiftにはunsignedを使います。Cはmask、C++ bitsetは名前付き操作とbinary表示を提供します。
C
loop、pointer、length、bufferを明示します。
C++
iteratorとalgorithmが操作と格納方法を分離します。
練習課題
両方を実行して変更し、言語ごとの保証を確認します。
- 各比較を手で追跡します。
- 重複と極値をテストします。
- standard libraryとbenchmarkします。