マスキング手順があります (指定されたサイズの下半分にすべて 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。なぜでしょうか?