C/C++中存储数字格式有整型和浮点型 字符型数据本质上也是以整型存储

整型

对于整型数据,最大值最小值很好计算

先确定对应数据型在本地所占用的字节数,同一数据型由于系统或者编译器的不同,所占字节不同,可以通过sizeof()函数查看,例如:

cout << sizeof(int) <<endl;

例如在我的电脑中 int 占用四个字节(即32位),1位符号位+31位数值位
所以int可表示的值得范围为 -2^31 — 2^31-1 (这里正负数不对称,减一是因为还有一个0)

同样的,对于整型都可以这么计算,通过所占字节数(即多少位)可以计算出它可以表示的最大最小值,需要注意的是对于无符号型,所有的位都是数值位,没有符号位,即没有负数。

浮点型

首先我们要知道,对于浮点型数据,计算机是以指数形式存储的。
即 a^b  a的b次方

具体格式
float型(通常为32位) 1位符号位+8位指数位+23位数值位(尾数位)

double型(通常为64位) 1位符号位+11位指数位+53位数值位(尾数位)

(这里数据型所占字节数可能也有差异,具体占用内存大小可通过之前的代码自行查看,这里选择一般情况作为举例)

顾名思义,符号位即0为正,1为负, 指数位表示次方大小,尾数位表示精度(precision)。和上面的式子对照,尾数位表示a,指数位表示b。这里尾数位的小数点默认在第一位最高位以后,以float为例,即尾数位最大表示的数为1.1111111111111111111111(二进制表示);不超过2。

例如 float 23位尾数位 即换算成十进制最大为2^23=8388608 所以float的精度位6-7位,6位精度可以保证,7位精度只能表示部分。
double 同理,精度为15-16位,15位精度可以保证正确,16位精度只能表示部分。

下面看float和double可以表示的最大值和最小值(这里最小值指最接近零的值)

float 理论上能表示的最大值:符号位为正 指数位最大127 尾数位全为1
即(2-2^22)^127 = 3.4028e+38
理论上最小值:(2-2^22)^-128 = 5.8776e-39

double 类型同样方法可以算的,不再赘述。

当然这只是理论值,具体数值在<float.h>头文件中有定义
打开float.h文件 可以看到看到以下代码:

#define DBL_DECIMAL_DIG 17                          // # of decimal digits of rounding precision
#define DBL_DIG 15 // # of decimal digits of precision
#define DBL_EPSILON 2.2204460492503131e-016 // smallest such that 1.0+DBL_EPSILON != 1.0
#define DBL_HAS_SUBNORM 1 // type does support subnormal numbers
#define DBL_MANT_DIG 53 // # of bits in mantissa
#define DBL_MAX 1.7976931348623158e+308 // max value
#define DBL_MAX_10_EXP 308 // max decimal exponent
#define DBL_MAX_EXP 1024 // max binary exponent
#define DBL_MIN 2.2250738585072014e-308 // min positive value
#define DBL_MIN_10_EXP (-307) // min decimal exponent
#define DBL_MIN_EXP (-1021) // min binary exponent
#define _DBL_RADIX 2 // exponent radix
#define DBL_TRUE_MIN 4.9406564584124654e-324 // min positive value #define FLT_DECIMAL_DIG 9 // # of decimal digits of rounding precision
#define FLT_DIG 6 // # of decimal digits of precision
#define FLT_EPSILON 1.192092896e-07F // smallest such that 1.0+FLT_EPSILON != 1.0
#define FLT_HAS_SUBNORM 1 // type does support subnormal numbers
#define FLT_GUARD 0
#define FLT_MANT_DIG 24 // # of bits in mantissa
#define FLT_MAX 3.402823466e+38F // max value
#define FLT_MAX_10_EXP 38 // max decimal exponent
#define FLT_MAX_EXP 128 // max binary exponent
#define FLT_MIN 1.175494351e-38F // min normalized positive value
#define FLT_MIN_10_EXP (-37) // min decimal exponent
#define FLT_MIN_EXP (-125) // min binary exponent
#define FLT_NORMALIZE 0
#define FLT_RADIX 2 // exponent radix
#define FLT_TRUE_MIN 1.401298464e-45F // min positive value

查看源代码,可以看到float最大值和我们理论值相同,但最小值不一样,double类型同样如此
对于最小值是怎么算的,为什么这么算,这一点我也不是很懂,如果有大佬看到,希望大佬解释。

C/C++ 数据类型 表示最大 最小数值 探讨的更多相关文章

  1. 数据类型总结——Number(数值类型)

    相关文章 简书原文:https://www.jianshu.com/p/9fb573ef10da 数据类型总结——概述:https://www.cnblogs.com/shcrk/p/9266015. ...

  2. { MySQL基础数据类型}一 介绍 二 数值类型 三 日期类型 四 字符串类型 五 枚举类型与集合类型

    MySQL基础数据类型 阅读目录 一 介绍 二 数值类型 三 日期类型 四 字符串类型 五 枚举类型与集合类型 一 介绍 存储引擎决定了表的类型,而表内存放的数据也要有不同的类型,每种数据类型都有自己 ...

  3. MATLAB - 练习程序,求灰度图像均值、最大、最小数值

    clear all; close all; clc img=imread('lena.bmp'); figure; imshow(uint8(img)); [m n]=size(img); img_m ...

  4. QString::arg()//用字符串变量参数依次替代字符串中最小数值

    QString i = "iTest";           // current file's number QString total = "totalTest&qu ...

  5. 【python基础语法】数据类型:数值、字符串 (第2天课堂笔记)

    """ 数据类型: 一.数值类型:整数 浮点数 布尔值 二.序列类型:字符串.列表 元祖 三.散列类型:字典 集合 可变数据类型: 列表 字典 集合,可以改动内存地址数据 ...

  6. 『无为则无心』Python基础 — 8、Python中的数据类型(数值、布尔、字符串)

    目录 1.数据类型介绍 2.数值型(Number) 3.布尔型(bool) 4.None(空值) 5.常量 6.字符串(String) 1.数据类型介绍 (1)什么是数据类型 在生活中,我们日常使用的 ...

  7. SQL Server的小数数值类型(float 和 decimal)用法

    在SQL Server中,小数数值实际上只有两种数据类型:float 和 decimal.double precision 整体是数据类型,等价于 float(53),real等价于float(24) ...

  8. JS基本概念 -- 数据类型(一)

    ECMAScript中有5种简单数据类型(也成为基本数据类型): Undefined.Null.Boolean.Number.String; 1种复杂数据类型: Object,Object本质上是由一 ...

  9. C语言的数据类型及其对应变量

    声明,定义和初始化 声明标识符iden是告诉编译器"有这么一个变量var,具体var里是什么,你自己去看".声明只需要标识符的类型和标识符名字,C语言的任何标识符在使用前都需要声明 ...

随机推荐

  1. 关于 antd tree 组件的推拽操作

    最近项目中使用到 tree 组件的推拽操作, 按常理来说应该主要用到其中的 onDrop 事件,但其中的参数又没有详细的说明,只是在官网给了个例子,网上搜索后又没有发现到位的总结. 因此经过N次的测试 ...

  2. 各种插值法的python实现

    一维插值 插值不同于拟合.插值函数经过样本点,拟合函数一般基于最小二乘法尽量靠近所有样本点穿过.常见插值方法有拉格朗日插值法.分段插值法.样条插值法. 拉格朗日插值多项式:当节点数n较大时,拉格朗日插 ...

  3. docker-compose up -d nginx 报错

    在阿里云ECS上创建nginx容器时,报错如上图. The solution: In your Dockerfile, before running any apt commands, add the ...

  4. centos7修改服务器时区

    查看时区设置 timedatectl 列出所有时区,通过键盘上下键进行浏览 timedatectl list-timezones 修改服务器时区为Africa/Lagos # 拉各斯的时区,UTC+1 ...

  5. 6步快速配置Tomcat环境变量(Win10)

    一.配置 tomcat环境变量之前先安装jdk和配置jdk的环境变量 1.首先右击我的电脑(此电脑),点击属性,或者也可以从控制面板上打开,如下图,找到系统点击高级系统设置: 2.然后进入系统属性界面 ...

  6. WebView(网页视图)基本用法

    资料来源于菜鸟教程 啊这官方文档居然失效了,打不开.那我们直接就看相关方法: WebChromeClient:辅助WebView处理Javascript的对话框.网站图标.网站title.加载进度等! ...

  7. Django学习day13随堂笔记

    每日测验 """ 今日考题 1.什么是django中间件,它的作用是什么,如何自定义中间件,里面有哪些用户可以自定义的方法,这些方法有何特点 2.基于django中间件的 ...

  8. oracle 基础SQL语句 版本5.7.29

    一.表与用户介绍 oracle安装完成后默认会有很多用户,大致分为2类用户:一类是必需的帐户,一类是存储各种应用的帐户,默认密码如下: oracle自带的也会有很多默认表存在: 二.创建用户.创建表空 ...

  9. Linux档案权限篇(一)

    查看档案的属性"ls-al". 即列出所有的档案的详细权限与属性(包括隐藏文件) 权限 第一个字符代表档案的类型: d:代表是目录 -:代表是文件 l:代表是连接文件(相当于win ...

  10. Spotlight监控工具的使用

    Spotlight下载地址:http://spotlight-on-unix.software.informer.com/download/#downloading Spotlight是Quest公司 ...