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 を基準に、単に反転します~