c/c++中的内置数据类型极值

c/c++中经常会涉及到获取内置数据类型(int,float,double)的极大值或极小值,结合STL的numeric_limits可以很轻松地实现,实际上c语言也自带了一些极值的宏。下面分别介绍通过STL的numeric_limits获取极值和通过c语言的头文件的宏获取极值的方法。

1.STL的numeric_limits方法

numeric_limits是STL中表示内置数据类型的算术性质的模板类。(MSDN:The template class describes arithmetic properties of built-in numerical types。)这里只介绍获取极值的方法。

求极大值,numeric_limits<T>::max(),其中T表示内置数据类型,可以为int,unsigned int,double等等。

求极小值,numeric_limits<T>::min(),T的含义同上。

例子:(来源于MSDN)

cout << "The maximum value for type float is: " << numeric_limits<float>::max( ) << endl; cout<< "The maximum value for type double is: " << numeric_limits<double>::max( )<< endl;

说明:

1)有人可能不明白numeric_limits<float>::max( )这个函数为什么可以调用,实际上类的静态函数可以采取classname::func()这样的调用方式,而无需新建一个类的实例。当然要确保惊天函数中不能涉及到类的非静态成员变量的操作,否则程序编译会报错。

2)在有些情况下,numeric_limits<double>::max()会报错,原因是与windef.h中的max宏定义冲突了。这个非常雷人,解决方法也很简单,将numeric_limits<double>::max(),用括号括起来即可。(numeric_limits<double>::max)()(参考:http://www.codelast.com/?p=1653

2.通过宏获取极大值极小值

既然c/c++已经规定了每个内置类型所占字节数,因此每个内置类型的极值肯定是固定的,既然这样c/c++是否在提供获取极值的方法呢?答案是肯定的,在float.h和limits.h中包含了类置类型的极值的宏定义。
如在float.h中,有如下宏定义(本文只截取部分代码,感兴趣的可以自己去看该文件。该文件主要是浮点型的极值等性质)

#define DBL_EPSILON     2.2204460492503131e-016 /* smallest such that 1.0+DBL_EPSILON != 1.0 */
#define DBL_MAX         1.7976931348623158e+308 /* max value */
#define DBL_MIN         2.2250738585072014e-308 /* min positive value */
#define FLT_EPSILON     1.192092896e-07F        /* smallest such that 1.0+FLT_EPSILON != 1.0 */
#define FLT_MAX         3.402823466e+38F        /* max value */
#define FLT_MIN         1.175494351e-38F        /* min positive value */
#define LDBL_MAX        DBL_MAX                 /* max value */
在limits.h中包含了整型等的极值,如

#define INT_MIN     (-2147483647 - 1) /* minimum (signed) int value */
#define INT_MAX       2147483647    /* maximum (signed) int value */
#define UINT_MAX      0xffffffff    /* maximum unsigned int value */
#define LONG_MIN    (-2147483647L - 1) /* minimum (signed) long value */
#define LONG_MAX      2147483647L   /* maximum (signed) long value */


上述两种访问获取的结果是否是相等的呢?由于c/c++已经规定了每个内置类型所占字节数,因此上述结果应该是一样的。




  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值