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)

说明:

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中,有如下宏定义(本文只截取部分代码,感兴趣的可以自己去看该文件。该文件主要是浮点型的极值等性质)

在limits.h中包含了整型等的极值,如

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

原文链接: https://www.cnblogs.com/xiaoyong298/archive/2011/11/30/2269972.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

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

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/37561

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月8日 下午2:12
下一篇 2023年2月8日 下午2:12

相关推荐