template<class T>
bool stdc_has_single_bit(T value);
bool stdc_has_single_bit_uc(unsigned char value);
bool stdc_has_single_bit_us(unsigned short value);
bool stdc_has_single_bit_ui(unsigned int value);
bool stdc_has_single_bit_ul(unsigned long value);
bool stdc_has_single_bit_ull(unsigned long long value);
概要
1ビットだけ立っている値をもっているか判定する。
C言語の<stdbit.h>で定義される関数であり、C++においてはC互換性のために提供される。C言語では汎用版は型総称マクロ (type-generic macro) として定義されるが、C++では関数テンプレートとして提供される。
テンプレートパラメータ制約
- 型
Tが符号なし整数型であること
戻り値
valueが2の累乗値 (1ビットだけ立っている) であればtrue、そうでなければfalseを返す。
例
#include <stdbit.h>
#include <cassert>
#include <cstdint>
int main() {
assert(stdc_has_single_bit(static_cast<std::uint8_t>(0b0000'1000)) == true);
assert(stdc_has_single_bit(static_cast<std::uint8_t>(0b0000'1010)) == false);
assert(stdc_has_single_bit(static_cast<std::uint8_t>(0)) == false);
// 型別関数
assert(stdc_has_single_bit_uc(static_cast<unsigned char>(0b0000'1000)) == true);
}
出力
バージョン
言語
- C++26
処理系
- Clang: 21 ✅
- GCC: 15 ✅
- Visual C++: 2026 Update 2 ❌
関連項目
std::has_single_bit- C++標準の対応する機能