首页 > 系统相关 >浅析C++中浮点数在内存中的存储方式

浅析C++中浮点数在内存中的存储方式

时间:2023-11-03 21:22:56浏览次数:36  
标签:阶码 存储 符号 尾数 浮点数 C++ 二进制 浅析

1. 任何数据在内存中都是以二进制的形式进行存储。

  1. 例如,short型数据1156,由于在32位机和64位机都占2B 一共16位 其二进制形式为:00000100 10000100。

  2. 在Intel CPU架构的系统中(目前用的最多的硬件架构系统),存放方式为 10000100(低地址单元) 00000100(高地址单元),因为Intel CPU的架构是小端模式。

  3. 目前所有的C/C++编译器都是采用IEEE所制定的标准浮点格式,即二进制科学表示法。

  4. 计算机将带有小数地数值分为两个部分进行存储。一部分表示值,另一部分表示用于对值进行放大或者缩小。比如表示34.1254那么用科学计数法表示为0.341254E100 100就是那个缩放因子。

6. C++表示浮点数的方式与上述相同,只不过C++是基于二进制进行表达,因此缩放因子是2的幂而不是10的幂

  1. 在二进制科学表示法中,S=M*2^N 主要由三部分构成:符号位+阶码(指数部分)(N)+尾数(M)。对于float型数据,若其二进制有32位,其中符号位1位,阶码8位,尾数23位;对于double型数据,其二进制为64位,符号位1位,阶码11位,尾数52位。
    float 与double

            31        30-23       22-0
    
            符号位     阶码        尾数
    
            63        62-52       51-0
    
            符号位     阶码        尾数
    

符号位:0表示正,1表示负

无论是单精度还是双精度在存储中都分为三个部分:
符号位(Sign) : 0代表正,1代表为负
指数位(Exponent):用于存储科学计数法中的指数数据,并且采用移位存储
尾数部分(Mantissa):尾数部分
单精度存储示意图:
image
双精度存储示意图:
image

标签:阶码,存储,符号,尾数,浮点数,C++,二进制,浅析
From: https://www.cnblogs.com/zxLai/p/17808522.html

相关文章

  • 梳理C++各种数据类型所占字节数和表示范围
    Outline1.数据类型所在字节数与程序运行平台有关2.列举各种数据类型所占字节数1.数据类型所在字节数与程序运行平台有关不同的平台上对不同数据类型分配的字节数是不同的。平台环境的理解:硬件架构操作系统(OS)编译器(Compiler)程序的运行环境取决于上述配件。原因:64位机......
  • 使用C++实现Range序列生成器
    在C++编程中,经常需要迭代一系列数字或其他可迭代对象。通常,这需要编写复杂的循环结构,但有一种精妙的方法可以使这一过程变得更加简单和可读。如果你使用过Python语言那么一定对Range语句非常的数据,我们可以使用C++来实现一个简单的Range封装,如下代码定义了一个名为Range的命名空间......
  • 使用C++实现Range序列生成器
    在C++编程中,经常需要迭代一系列数字或其他可迭代对象。通常,这需要编写复杂的循环结构,但有一种精妙的方法可以使这一过程变得更加简单和可读。如果你使用过Python语言那么一定对Range语句非常的数据,我们可以使用C++来实现一个简单的Range封装,如下代码定义了一个名为Range的命名空间,......
  • C++ float与double类型的简单区别
    1.有效位数与精度有效位和精度的两个概念是不同的,我们先说float和double各自的有效位。在float与double中默认的有效位都是6位有效位,意思就是从第一个不为0的数字算起有6个数字是有效的后边无效的数字也不会显示,如下图:代码:运行结果:可以看出不管你的float定义的有多少位小......
  • C++ 字符串与数值间的转换(只归纳了常用情况)
    很多编程中字符串与数字间的转换是一种常见的需求下面总结了C++中字符串与数值间是如何进行转换的。目录:1.字符串转数字(C版本)2.字符串转数字C++风格3.数字转字符串1.字符串转数字(C版本)strings1="123";strings2="123.1";inti=atoi(s1.c_str());......
  • C++的对象与类的含义
    C++是一门面向对象的编程语言,理解C++需要掌握类(class)和对象(object)这两个概念。C++中的类(Class)可以看做C语言中结构体(Struct)的升级版。结构体是一种构造类型,可以包含若干成员变量,每个成员变量的类型可以不同;可以通过结构体来定义结构体变量,每个变量拥有相同的性质。例如:#include<s......
  • C++头文件和std命名空间
    C++是在C语言的基础上开发的,早期的C++还不完善,不支持命名空间,没有自己的编译器,而是将C++代码翻译成C代码,再通过C编译器完成编译。这个时候的C++仍然在使用C语言的库,stdio.h、stdlib.h、string.h等头文件依然有效;此外C++也开发了一些新的库,增加了自己的头文件,例如:iostream......
  • C++函数重载
    在实际开发中,有时候我们需要实现几个功能类似的函数,只是有些细节不同。例如希望交换两个变量的值,这两个变量有多种类型,可以是int、float、char、bool等,我们需要通过参数把变量的地址传入函数内部。在C语言中,程序员往往需要分别设计出三个不同名的函数,其函数原型与下面类似:voidsw......
  • C++类成员的访问权限以及类的封装
    C++通过public、protected、private三个关键字来控制成员变量和成员函数的访问权限,它们分别表示公有的、受保护的、私有的,被称为成员访问限定符。所谓访问权限,就是你能不能使用该类中的成员。Java、C#程序员注意,C++中的public、private、protected只能修饰类的成员,不能修饰类......
  • C++构造函数初始化列表
    构造函数的一项重要功能是对成员变量进行初始化,为了达到这个目的,可以在构造函数的函数体中对成员变量一一赋值,还可以采用初始化列表。C++构造函数的初始化列表使得代码更加简洁,请看下面的例子:#include<iostream>usingnamespacestd;classStudent{private:......