2進数の最初のiビットが0か1のマスクをビット演算で素早く求める

C++ バイナリ左シフト高速フロント i 位置 0

template<class T>
static T CreateMask(uint32_t bits) {
    return (1 << (sizeof(T) * 8 - bits)) - 1;
}
1 はバイナリで0b00000001 として書き込まれます
仮定: 1 を 2 ビット左にシフトして 0b00000100を取得し、1 を減算して 0b00000011 を取得し
、最後の 2 ビットを 1 に設定するだけです

したがって、左シフト後の i ビットは 1 で、前の sizeof(T)*8-i ビットは 0 です。

したがって、最初の i ビットが 0 のバイナリ マスクを取得する場合は、1 を sizeof(T)*8 - i だけ左にシフトする必要があります。

C++ バイナリ左高速フロント i 位置 1

前の i 位置 0 を基準に、単に反転します~

おすすめ

転載: blog.csdn.net/qq_55796594/article/details/129064981