C++数值类型极限值的获取
C/C++中基本类型的数值极限值一般来说都是与具体平台有关的,在程序设计的过程中为了写出与平台无关的程序则必须通过合理科学的方法去获取各种类型的极值,常用的获取方法有两种:一种是传统的C语言所采用的预处理器常数,另一种方法则是通过标准库中所提供的模版类numeric_limits<>来获取这些极值。
下面先详解其用法后再评其优劣:
一、传统C语言的预处理器常数
在C++中这些C语言的预处理器常数任然可以用,一般对于各种基本固有类型的最大值宏为:
INT_MAX、FLT_MAX、DBL_MAX、SHRT_MAX、CHAR_MAX. . . . .
分别对应int、float、double、short、char、、、的最大值,其他类型都有类似形式的宏
最小值宏为:
INT_MIN、FLT_MIN、DBL_MIN、SHRT_MIN、CHAR_MIN. . . . .
分别对应int、float、double、short、char、、、的最小值,其他类型都有类似形式的宏
二、标准库template numeric_limits<>
numeric_limits<>是一个模版类,它是有一个通用模版和一系列各种类型的特化模版组成,在该模版类中常用的几个数据成员和成员函数如下:
is_specialized 该类型是否存在极值
is_signed 该类型是否带有正负号
min() 获取最小值
max() 获取最大值
具体应用示例代码如下:
#include<iostream>
#include<string>
using namespace std;
int main()
{
//传统C语言的数值极限cout<<"int:MAX() "<<INT_MAX<<endl;cout<<"int:MIN() "<<INT_MIN<<endl;cout<<"float:MAX() "<<FLT_MAX<<endl;cout<<"float:MIN() "<<FLT_MIN<<endl;cout<<"double:MAX() "<<DBL_MAX<<endl;cout<<"double:MIN() "<<DBL_MIN<<endl;cout<<"short:MAX() "<<SHRT_MAX<<endl;cout<<"short:MIN() "<<SHRT_MIN<<endl;//采用模版类numeric_limits<>的方式获取极值cout<<"int:MAX() "<<numeric_limits<int>::max()<<endl;cout<<"int:MIN() "<<numeric_limits<int>::min()<<endl;cout<<"float:MAX() "<<numeric_limits<float>::max()<<endl;cout<<"float:MIN() "<<numeric_limits<float>::min()<<endl;cout<<"double:MAX() "<<numeric_limits<double>::max()<<endl;cout<<"double:MIN() "<<numeric_limits<double>::min()<<endl;cout<<"short:MAX() "<<numeric_limits<short>::max()<<endl;cout<<"short:MIN() "<<numeric_limits<short>::min()<<endl;//判断是否存在极值cout<<"string类型是否存在极值:"<<numeric_limits<string>::is_specialized<<endl;
}//输出结果如下:
int:MAX() 2147483647
int:MIN() -2147483648
float:MAX() 3.40282e+038
float:MIN() 1.17549e-038
double:MAX() 1.79769e+308
double:MIN() 2.22507e-308
short:MAX() 32767
short:MIN() -32768
int:MAX() 2147483647
int:MIN() -2147483648
float:MAX() 3.40282e+038
float:MIN() 1.17549e-038
double:MAX() 1.79769e+308
double:MIN() 2.22507e-308
short:MAX() 32767
short:MIN() -32768
string类型是否存在极值:0
请按任意键继续. . .
简评:做为拥有优秀代码风格的程序员来说最好的选择方式应该还是用标准库的 template numeric_limits<>会比较好,具体的理由是:一、相比C语言的预定义常数标准库的numeric_limits提供了更好的安全性;二、numeric_limits<>类可以说是一个各种类型信息的模版体系,更加规范,而且更重要的是程序员自己也可以通过为template numeric_limits增加特化版本而你自定义的数值类型增加类型信息,从而在编程时可以达到统一规范调用的效果。
C++数值类型极限值的获取相关推荐
- java poi设置单元格格式为数值,Apache POI 如何读取Excel中数值类型单元格所规定的保留小数位?...
问题描述 java apache poi 包内是否有方法可以获取Excel数值类型单元格中保留的位数? 问题出现的环境背景及自己尝试过哪些方法 有这么一个场景: 需求:从Excel文件中读取数据,原样 ...
- mysql数值类型占用字节及范围_mysql数据类型及占用字节数【mysql】
一.数值类型 1,int 类型 4字节 .备注:一个字节8位,即有32位,存在一个符号位.所以能存的数值大小为-2的31次方到2的31次方: 2,tinyint 类型 1字节. 3,smalli ...
- .Net判断一个对象是否为数值类型探讨总结(高营养含量,含最终代码及跑分)...
前一篇发出来后引发了积极的探讨,起到了抛砖引玉效果,感谢大家参与. 吐槽一下:这个问题比其看起来要难得多得多啊. 大家的讨论最终还是没有一个完全正确的答案,不过我根据讨论结果总结了一个差不多算是最终版 ...
- python数值类型教程_Python数值类型 int、float、complex 详解
Python数值类型 int.float.complex 详解 Python数值类型:int.float.complex 在Python程序中,int.float和complex是三种十分重要的数值类 ...
- Mysql使用大全(MySQL架构与存储引擎 、事务 、业务设计 、索引 、数据结构 、执行计划 、数值类型)
这是一篇mysql大全,学习完这篇文章,相信在日常业务和面试完全不在问题,下面我们来一一介绍 MySQL架构与存储引擎 全局变量和会话变量 要想显式指定是否设置全局或会话变量,使用GLOBAL或SES ...
- 如何将一组列表(三个以上,数值类型不一)保存为txt文件
点击上方"Python爬虫与数据挖掘",进行关注 回复"书籍"即可获赠Python从入门到进阶共10本电子书 今 日 鸡 汤 郡邑浮前浦,波澜动远空. 大家好, ...
- python数值类型不包含复数_[python学习手册-笔记]003.数值类型
003.数值类型 ❝ 本系列文章是我个人学习<python学习手册(第五版)>的学习笔记,其中大部分内容为该书的总结和个人理解,小部分内容为相关知识点的扩展. 非商业用途转载请注明作者和出 ...
- 自动化测试之什么是python基础基本数据类型数值类型及序列类型
前言: 大家都知道学习软件测试需要必须要掌握一门开发语言,对于测试小白来说我们都是推荐python进行学习,因为比较简单,那么今天笔者想给大家唠唠python语言的基本数据类型可以分为三类:数值类型. ...
- 全栈自动化测试之python基础基本数据类型数值类型及序列类型
文章末尾给大家留了大量的福利 前言 大家都知道学习软件测试需要必须要掌握一门开发语言,对于测试小白来说我们都是推荐python进行学习,因为比较简单,那么今天笔者想给大家唠唠python语言的基本数据 ...
最新文章
- linux中-i选项的作用,linux – find中的-prune选项有什么作用?
- 今天来说一下我的SAMC
- C#实现打印与打印预览功能
- android 动态让控件超出屏幕_android 动态设置屏幕控件宽高度
- CodeForces - 609E Minimum spanning tree for each edge(最小生成树+树链剖分+线段树/树上倍增)
- OPC Client “failed to execute OPCENUM” 解决方法
- 打破多项世界记录 双11背后最大的力量是技术
- 醉了!用数据分析的方法帮你找到物美价廉的美酒 | 小长假放大招
- 最小公倍数一些性质定理及证明
- linux nfs4 超时,Linux文件服务器NFS详解【4】
- 局域网如何通过SSH 2连接上VMware 10虚拟机新装的centOS系统远程登录
- 高通855比高通675贵多少钱,性能差距有多大?
- python filter
- python库skimage 图像直方图局部均衡化
- vue路由传参丢失问题
- 我的挨踢人物传之又是一年找工作时
- Android考察报告模板,《跨越星弧》星球地质考察报告首次公开!
- 【阿里Java技术进阶】官方钉群直播大全(持续更新)...
- 三维点云语义分割基础知识
- 服务器物理机如何实现系统快照,Lvm快照实现物理备份之自动化
热门文章
- android 小视频添加水印,安卓手机怎么给视频加水印 视频加水印的手机软件|微信小视频怎么加水印...
- deepin系统安装的若干问题
- RAS--远程访问服务
- nginx 404及5xx页面配置
- 社群运营,做好群活跃的6个要点
- 在win桌面上添加系统图标
- ajax资料收集-Ajax文章(教程和实例)---Ajax资源下载(源码和教程)---Ajax规范标准
- java的jsf是什么_什么是 JSF(Java Server Faces)
- 【机器学习】机器学习泛泛之谈
- 前端工程化:express服务端开发