マスキング手順があります (指定されたサイズの下半分にすべて 1 のビット マスクを作成します)。
template<class T>
T bottom_half() {
T halfway = ((sizeof(T) * 8) / 2);
T mask = (1 << halfway) - 1;
return mask;
}
bottom_half<int>()
またはlong
またはを呼び出すと正常に動作しますchar
。しかし、何らかの理由で で実行するとlong long
、halfway
は正しく に設定されます32
が、mask
です0
。なぜでしょうか?