C/C++ 数据类型 表示最大 最小数值 探讨

技术C/C++ 数据类型 表示最大 最小数值 探讨 C/C++ 数据类型 表示最大 最小数值 探讨C/C++中存储数字格式有整型和浮点型 字符型数据本质上也是以整型存储整型
对于整型数据,最大值最小值很

关于表示最大值和最小值的C/C数据类型的讨论。

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为负,指数位表示幂,尾数位表示精度。与上述公式相比,尾数位代表a,指数位代表B.这里,默认情况下,尾数位的小数点在第一个最高位之后。以浮点数为例,即尾数位数最大为1.1111111111111111111111(二进制表示);不超过2个。

比如浮点数的23位尾数位转换为2 ^ 23=8388608的十进制,那么浮点数的精度为6-7位,可以保证6位的精度,而7位的精度只能代表一部分。

同理,双精度是15-16位,15位精度可以保证精度,16位精度只能代表一部分。

看看float和double可以表示的最大值和最小值(其中最小值是指最接近零的值)。

float理论上可以表示的最大值:符号位是正指数位,最大127个尾数位都是1。

即(2-2 22) 127=3.4028e38。

理论最小值:(2-2 22)-128=5.8776e-39。

双式可以用同样的方法计算,不再赘述。

当然,这只是一个理论值,具体值在float.h头文件中定义。

打开float.h文件,您可以看到以下代码:

#定义DBL _十进制_挖17 //#舍入精度的十进制位数

#定义DBL_DIG 15 //#的小数位数的精度

#定义DBL _ EPSILON 2.2204460492503131 e-016//最小这样1.0 DBL_EPSILON!=1.0

#定义DBL_HAS_SUBNORM 1 //类型不支持低于正常值的数字

#定义DBL_MANT_DIG 53 //#尾数中的位数

#定义DBL _ MAX 1.7976931348623158 e 308//MAX值

#定义DBL_MAX_10_EXP 308 //最大十进制指数

#定义DBL_MAX_EXP 1024 //max二进制指数

#定义DBL _最小2.2250738585072014e-308 //最小正值

#定义DBL _最小_10_EXP (-307) //最小十进制指数

#定义DBL _最小_EXP (-1021) //最小二进制指数

#定义_ DBL _基数2 //指数基数

#定义DBL _真_最小4.9406564584124654e-324 //最小正值

#定义FLT _十进制_挖9 //#舍入精度的十进制位数

#定义FLT_DIG 6 //#精度的小数位数

#定义FLT_EPSILON 1.192092896e-07F //最小,比如1.0 FLT_EPSILON!=1.0

#定义FLT_HAS_SUBNORM 1 //类型不支持低于正常值的数字

#定义FLT _卫士0

#定义FLT_MANT_DIG 24 //#尾数中的位数

#定义FLT_MAX 3.402823466e 38F //最大值

#定义FLT_MAX_10_EXP 38 //最大十进制指数

#定义FLT_MAX_EXP 128 //max二进制指数

#定义FLT _最小1.175494351e-38F //最小归一化正值

#定义FLT _最小_10_EXP (-37) //最小十进制指数

#定义FLT _最小_EXP (-125) //最小二进制指数

#定义FLT _归一化0

#定义FLT _基数2 //指数基数

#定义FLT _真_最小值1.401298464e-45F //最小值正值

查看源代码,可以看到float的最大值和我们的理论值是一样的,但是最小值不同,double类型也不同。

我不太明白最小值是如何计算的,为什么要计算。如果有老板看到,希望能解释一下。

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/48880.html

(0)

相关推荐

  • Python中正则表达式的巧妙用法是怎么样的

    技术Python中正则表达式的巧妙用法是怎么样的Python中正则表达式的巧妙用法是怎么样的,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。 前言正则表达

    攻略 2021年10月26日
  • 如何进行MySQL表结构的导入和导出

    技术如何进行MySQL表结构的导入和导出本篇文章给大家分享的是有关如何进行MySQL表结构的导入和导出,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。MySQ

    攻略 2021年10月25日
  • 清明时节雨纷纷的意思,清明时节雨纷纷的纷纷是什么意思

    技术清明时节雨纷纷的意思,清明时节雨纷纷的纷纷是什么意思雨纷纷,虽然是说天气,更有说人当时的心情,清明佳节雨纷纷,路上行人欲断魂,其实清明佳节,有多少人心里不舒服,天在下雨,人也在下雨(思念亲人的眼泪)路上那么多行人去祭

    生活 2021年10月21日
  • 更新webservice引用会遇到什么问题

    技术更新webservice引用会遇到什么问题这篇文章给大家分享的是有关更新webservice引用会遇到什么问题的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。当写完webservice,并且

    攻略 2021年11月23日
  • 全导数,什么是全导数,偏导数,方向导数

    技术全导数,什么是全导数,偏导数,方向导数偏导数全导数:函数在某点处延坐标轴正向,随着该自变量的变化,而引起的函数值的变化率.方向导数:函数在某点的任一方向上,随着该自变量的变化,而引起的函数值的变化率.因此它们的区别主

    生活 2021年10月27日
  • 如何使用OpenCV+Python去除手机拍摄文本底色

    技术如何使用OpenCV+Python去除手机拍摄文本底色本篇文章为大家展示了如何使用OpenCV+Python去除手机拍摄文本底色,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

    攻略 2021年11月2日