Làm cách nào để tìm giá trị số nguyên tối đa của một loại không xác định? Có điều gì hiệu quả hơn điều này không:Cách tìm giá trị tối đa của loại số nguyên không xác định
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;
}
Lưu ý: mã đã cho có thể là sai. Thử nghiệm '-1' và trả về đầu tiên cho các loại unsigned là OK, nhưng sau đó: đối với' max_neg': đầu tiên 'CHAR_BIT' có thể lớn hơn' 8', và dù sao bạn đang chuyển '1' thành _sign bit_, mà tôi nghĩ là không xác định; và đối với 'all_ones':' -1' có thể _not_ là "tất cả những cái", ví dụ trên một máy tính bổ sung hoặc ký hiệu và độ lớn của một người. Và đối với logic: có vẻ như 'max_neg' đã bằng' max_pos'. –