当前位置:网站首页>À propos du stockage des données en mémoire
À propos du stockage des données en mémoire
2022-06-25 13:10:00 【Lin JT】
À propos du stockage des données en mémoire
Cet article explique comment les nombres flottants sont stockés en mémoire
Tout d'abord,,Regardons d'abord cette procédure:>

En apprenant, La réponse que j'ai donnée est très simple9 9.0 9 9.0,Et pourtant,Quand le programme a commencé:>

Pour analyser les procédures ci - dessus, Il faut d'abord comprendre le stockage des nombres flottants en mémoire.
Pour les nombres binaires flottants, Conformément aux normes internationalesIEEE(Institute of Electrical and Electronic Engineering) 754, N'importe quel nombre binaire de points flottantsVPeut être exprimé sous la forme suivante:>
*(-1) ^S * M 2 ^E
Parmi eux(-1)^SEst un bit de symbole,Quands = 0 Heure,VEst un nombre positif, Quand le nombre de points flottantss = 1 , VEst négatif.
MEst un bit valide, M>=1EtM < 2
2 ^ELa puissance indique le chiffre de l'indice
Par exemple,:>
Par exemple, un nombre décimal flottant 5.5,On le convertit en binaire pour:>
101.1 //Ici. .1La raison pour laquelle1Le poids de2 ^-1Secondaire,C'est - à - dire:0.5.Et nous utilisons çaVFormat de,Pour pouvoir écrire:>
*(-1)^0 1.011 * 2 ^ 2
C'est - à - dire:S = 0; M = 1.011; E = 2;
Pour-5.5,Avec çaVFormat de, Peut être exprimé comme suit:
*(-1)^1 (1.011) * 2 ^2;
Pour le stockage de nombres flottants en mémoire,Il existe les dispositions suivantes:
Pour un seul flotteur de précision

Pour le nombre de points flottants de double précision:>

Il y a aussi des dispositions: Parce queMToujours.>=1 Moins de2, C'est - à - dire:MToujours égal à1Un entier de, Donc,,Quand il est stocké en mémoire,Il n'y aura que des décimales,Exemple 5.5
Peut être exprimé comme suit:**(-1)^0 1.011 * 2 ^ 2*, M = 1.011. Mais les recettes que nous stockons, Ne stockera que011, Et quand on va l'utiliser, C'est tout.1C'est bon..
Pour l'indiceEEn termes, Le premier est ununsigned intNombre de types, Donc sa portée est 0 ~ 255(8bit) Ou 0 ~2047(11bit)
Et quand il est exprimé par comptage scientifique, C'est inévitableECas de nombre négatif Par exemple Décimal0.5 Exprimé en nombre binaire comme:>
1*10 ^-1 Encore.EEst supérieur ou égal à0, Donc,, Stockage de mémoire spécifiéELa valeur réelle de doit être ajoutée à un nombre intermédiaire, I.e.127 (8bit) Ou1023(11bit)Après,Stockage en mémoire
Comme tout à l'heure-1.,Enregistrer sous32Bit float, Enregistrer sous -1 + 127 = 126C'est - à - dire:
01111110
En outre, IndexEEt les règles suivantes:>
SiELes valeurs de ne sont pas toutes1Ou0, EtELa valeur réelle de est la valeur stockée en mémoire moins127(Ou1023),Ensuite, les chiffres validesMAjouter le premier.
Comme tout à l'heure0.5 BinaireVExprimé en:>
1.0*2 ^ -1 Ici.EPour-1, MPour1.0,Donc les données stockées en mémoire sont
0 01111110 00000000000000000000000
SiELes données stockées dans sont complètes0Heure, Alors réfléchissons., Quel petit nombre!,C'est - à - dire:2^ -127Secondaire, Donc,, Les dispositions sont les suivantes::>
QuandELes données stockées dans sont complètes0Heure, Son indiceELa valeur réelle de 1 - 127(Ou1023), Et un nombre valideMPlus de, Mais plus0, C'est un signe de proximité0Nombre de.
QuandELes données stockées dans le sont pour un temps complet, AlorsELa valeur réelle de128(8bit), Alors2^ELa puissance est un très grand nombre, Donc,,VExprimé en infini positif et négatif.
Revenons au premier exemple:>
#include <stdio.h>
int main()
{
int n = 9;
float* pFloat = (float*)&n;
printf("nLa valeur de:%d\n", n);
printf("*pFloatLa valeur de:%f\n", *pFloat);
*pFloat = 9.0;
printf("numLa valeur de:%d\n", n);
printf("*pFloatLa valeur de:%f\n", *pFloat);
return 0;
}

Regardez la deuxième partie:>

Sous forme de points flottantsnC'est changé.9.0,Alors9.0La représentation binaire de:>
1001.0C'est - à - dire:1.001*2^3 AlorsS = 0; E = 3 + 127 = 130; M = 0.001.C'est - à - dire:
0 1000 0010 00100000000000000000000
Donc, en termes d'entiers,Ces données sont:>
![[Impossible de transférer l'image de la chaîne externe,Il peut y avoir un mécanisme antivol à la station source,Il est recommandé de sauvegarder l'image et de la télécharger directement(img-Lw2C6Cbn-1638165164585)(C:\Users\MSI-NB\AppData\Roaming\Typora\typora-user-images\image-20211129090318437.png)]](/img/80/a182c36b6a88835bfbf0b336075649.png)
Sous forme de points flottants, Bien sûr que9.0C'est.
边栏推荐
- Golang keyboard input statement scanln scanf code example
- Jenkins pipeline uses
- 515. Find Largest Value in Each Tree Row
- LeetCode链表题解技巧归纳总结
- 重磅直播|BizDevOps:数字化转型浪潮下的技术破局之路
- Elemtnui select control combined with tree control to realize user-defined search method
- Used in time filter (EL table)
- RESTful和RPC
- 与生产环境中的 console.log 说再见
- 提高排名的 15 个基本 SEO 技巧
猜你喜欢

My first experience of go+ language -- a collection of notes on learning go+ design architecture

深圳民太安智能二面_秋招第一份offer

Uncover gaussdb (for redis): comprehensive comparison of CODIS

3+1 guarantee: how is the stability of the highly available system refined?

Golang keyboard input statement scanln scanf code example
![[转]以终为始,详细分析高考志愿该怎么填](/img/77/715454c8203d722e246ed70e1fe0d8.png)
[转]以终为始,详细分析高考志愿该怎么填

中国虚拟人哪家强?沙利文、IDC:小冰百度商汤位列第一梯队

PPT绘论文图之导出分辨率

Wechat full-text search technology optimization

golang键盘输入语句scanln scanf代码示例
随机推荐
坡道带来的困惑
剑指 Offer II 029. 排序的循环链表
list.replace, str.append
剑指Offer 第 2 天链表(简单)
剑指offer 第 3 天字符串(简单)
A half search method for sequential tables
JVM参数解释
药物设计新福音:腾讯联合中科大、浙大开发自适应图学习方法,预测分子相互作用及分子性质
Golang keyboard input statement scanln scanf code example
MySQL 学习笔记
nacos无法修改配置文件Mysql8.0的解决方法
提高排名的 15 个基本 SEO 技巧
JSTL tag: fmt:formatdate tag format Chinese standard time or timestamp
Lexical trap
Sword finger offer II 029 Sorted circular linked list
Sword finger offer 04 Find in 2D array
Spoken English - weak reading
Capabilities required by architects
PPT绘图之AI助力论文图
Module 5 (microblog comments)