@tag: BiT C TemplatE CPlusPlus
#define TYPE_SIGNED(t) (! ((t) 0 < (t) -1)) #define TYPE_MAX(t) \ ((t) (! TYPE_SIGNED (t) \ ? (t) -1 \ : ~ (~ (t) 0 << (sizeof (t) * CHAR_BIT - 1))))
#include <iostream>
#include <typeinfo>
#include <cxxabi.h>
template<typename T>
T max()
{
T Value = ~0;
if (Value == (Value >> 1)) {
Value = 1;
Value <<= (sizeof(Value) << 3) - 1;
Value = ~Value;
}
return(Value);
}
info: unsigned short (16b) [0,65535]
info: unsigned int (32b) [0,4294967295]
info: unsigned long (32b) [0,4294967295]
info: unsigned long long (64b) [0,18446744073709551615]
info: short (16b) [-32768,32767]
info: int (32b) [-2147483648,2147483647]
info: long (32b) [-2147483648,2147483647]
info: long long (64b) [-9223372036854775808,9223372036854775807]
template<typename T>
T min()
{
T Value = max<T>();
return(++Value);
}
template<typename T>
void display()
{
std::string name;
int status;
name = abi::__cxa_demangle(typeid(T).name(), 0, 0, &status);
std::cout << "info: " << name << " ("<<(sizeof(T)<<3)<<"b)"<<" [" << min<T>() <<","<< max<T>() <<"]"<<std::endl;
}
int main()
{
//display<unsigned char>();
display<unsigned short>();
display<unsigned int>();
display<unsigned long>();
display<unsigned long long>();
//display<unsigned float>();
//display<unsigned double>();
//display<char>();
display<short>();
display<int>();
display<long>();
display<long long>();
//display<float>();
//display<double>();
return(0);
}
/*
info: unsigned short (16b) [0,65535]
info: unsigned int (32b) [0,4294967295]
info: unsigned long (32b) [0,4294967295]
info: unsigned long long (64b) [0,18446744073709551615]
info: short (16b) [-32768,32767]
info: int (32b) [-2147483648,2147483647]
info: long (32b) [-2147483648,2147483647]
info: long long (64b) [-9223372036854775808,9223372036854775807]
*/