Jak znaleźć maksymalną liczbę całkowitą nieznanego typu? Czy istnieje coś bardziej efektywne niż to:Jak znaleźć maksymalną wartość nieznanego typu całkowitego?
template<class T>
T test(T i) {
if (((T)-1) > 0)
return -1;
T max_neg = ~(1 << ((sizeof(T)*8)-1));
T all_ones = -1;
T max_pos = all_ones & max_neg;
return max_pos;
}
Uwaga: podany kod prawdopodobnie był nieprawidłowy. Wczesny test "-1" i powrót dla typów bez znaku jest OK, ale wtedy: dla 'max_neg': pierwszy' CHAR_BIT' może być większy niż '8', a mimo to przesuwasz' 1' do _ignal bit_, co moim zdaniem jest nieokreślone; a dla 'all_ones':' -1' może _nie_ być "wszystkimi", na przykład na maszynie do dopełniania lub znaku i magnitudo. I dla logiki: wygląda na to, że 'max_neg' będzie już równe' max_pos'. –