数据在内存中存储☞(超详解)

news2024/10/6 18:35:49

目录

一.数据类型大家族

1.了解类型的意义

 2.数据类型大家族的分类

二.详解☞数据储存之整形

1.储存方式

(1).原码反码补码的概念

(2).原码反码补码出现的原因:

计算机中只有加法器没有减法器,所有只有当数据转化成补码再进行相加时能算出减法结果(因为两者补码相加,大于32位的计算机自动舍去不计)

 2.大小端存储

3.整形数据类型值循环图

4.二级制理解练习:

 三.详解☞数据储存之浮点型

1.浮点型与整形不是同一储存方式的证明​编辑

 2.浮点数存储规则

 注意:e的情况复杂:

  指数E从内存中取出还可以再分成三种情况:


一.数据类型大家族

1.了解类型的意义

(1).了解这个类型开辟内存空间的大小(大小决定了使用范围)防止数据溢出。

例如:

(2).明白看待内存空间的视角,当出现非语法错误时明白有可能是哪里的原因。

例如:

 2.数据类型大家族的分类

(1).整形家族:int char short long longlong ,以及这五类的signed 和unsigned形式。

 注意点:整型的每一种都有无符号(unsigned)和有符号(signed)两种类型(float和double总是带符号的),在默认情况下声明的整型变量都是有符号的类型(char有点特别但是常见还是signed的),如果需声明无符号类型的话就需要在类型前加上unsigned。

(2).浮点型家族:float double longdouble

(3).构造类型:

(4).指针类型:

(5).空类型:void (后面在sqort函数里面有应用)

二.详解☞数据储存之整形

1.储存方式

(1).原码反码补码的概念

原码:将写的数据转换成二进制形式。

反码:将所转化的二进制序列符号位不变其他位按位取反。

补码:反码+1,然后存放在内存中。

(2).原码反码补码出现的原因:

计算机中只有加法器没有减法器,所有只有当数据转化成补码再进行相加时能算出减法结果(因为两者补码相加,大于32位的计算机自动舍去不计)

例如:

 2.大小端存储

(1).大端存储:大端(存储)模式,是指数据的低位保存在内存的高地址中,而数据的高位,保存在内存的低地址中

(2).小端存储:小端(存储)模式,是指数据的低位保存在内存的低地址中,而数据的高位,,保存在内存的高地址中

(3)举例子1:一个 16bit 的 short 型 x ,在内存中的地址为 0x0010 , x 的值为 0x1122 ,那么 0x11 为高字节, 0x22 为低字节。对于大端模式,就将 0x11 放在低地址中,即 0x0010 中, 0x22 放在高地址中

//设计一个小程序来判断当前机器的字节序

//int main()
//{
//	int a = 1;
//	char* p = (char*)&a;
//	if (1 == *p)
//	{
//		printf("小端\n");
//	}
//	else
//	{
//		printf("大端\n");
//	}
//
//	return 0;
//}

3.整形数据类型值循环图

以char类型为例:(其他整形,内容类似)

signed char:   -128~127               unsigned char:在左图的基础上将符号位1默认当数值0~255

4.二级制理解练习:

 三.详解☞数据储存之浮点型

1.浮点型与整形不是同一储存方式的证明

 2.浮点数存储规则

                                                   (-1)^S * M * 2^E
                         (-1)^S表示符号位,当S=0,V为正数;当S=1,V为负数。
                                     M表示有效数字,大于等于1,小于2。
                                                     2^E表示指数位

举例:(1)十进制的5.0,写成二进制是 101.0 ,相当于 1.01×2^2 。那么,按照上面V的格式,可以得出S=0,M=1.01,E=2。(2)十进制的-5.0,写成二进制是 -101.0 ,相当于 -1.01×2^2 。那么,S=1,M=1.01,E=2。

(3).

进阶;=>

 注意:e的情况复杂:

E为一个无符号整数(unsigned int)
这意味着,如果E为8位,它的取值范围为0~255;如果E为11位,它的取值范围为0~2047。但是,我们知道,科学计数法中的E是可以出现负数的,所以IEEE 754规定,存入内存时E的真实值必须再加上一个中间数,对于8位的E,这个中间数是127;对于11位的E,这个中间数是1023。比如,2^10的E是10,所以保存成32位浮点数时,必须保存成10+127=137,即10001001


  指数E从内存中取出还可以再分成三种情况:

E不全为0或不全为1
这时,浮点数就采用下面的规则表示,即指数E的计算值减去127(或1023),得到真实值,再将
有效数字M前加上第一位的1。
比如:
0.5(1/2)的二进制形式为0.1,由于规定正数部分必须为1,即将小数点右移1位,则为
1.0*2^(-1),其阶码为-1+127=126,表示为01111110,而尾数1.0去掉整数部分为0,补齐0到23位00000000000000000000000,则其二进制表示形式为0   01111110   00000000000000000000000
E全为0
这时,浮点数的指数E等于1-127(或者1-1023)即为真实值,有效数字M不再加上第一位的1,而是还原为0.xxxxxx的小数。这样做是为了表示±0,以及接近于0的很小的数字

E全为1
这时,如果有效数字M全为0,表示±无穷大(正负取决于符号位s)

总结使用:

9的补码:00000000000000000000000000001001
对于浮点型来说:0 00000000 00000000000000000001001
取出:(-1)^0 * 0.00000000000000000001001*2 ^ -126

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/146824.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SemanticKITTI: A Dataset for Semantic Scene Understanding of LiDAR Sequences

Paper name SemanticKITTI: A Dataset for Semantic Scene Understanding of LiDAR Sequences Paper Reading Note URL: https://arxiv.org/pdf/1904.01416.pdf TL;DR 2019 ICCV 论文,提出了一个大规模的真实场景 LiDAR 点云标注数据集 SemanticKITTI&#xff…

数字信号处理第六次试验:数字信号处理在双音多频拨号系统中的应用

数字信号处理第六次试验:数字信号处理在双音多频拨号系统中的应用前言一、实验目的二、实验原理和方法1.关于双音多频拨号系统2.电话中的双音多频(DTMF)信号的产生与检测3.检测DTMF信号的DFT参数选择4.DTMF信号的产生与识别仿真实验三、实验内…

菜鼠的保研总结

1.个人基本情况 本科学校:山东某双非 本科专业:网络工程 成绩排名:1/46 英语成绩:四级529,六级502 科研竞赛:美国大学生数学建模比赛特等奖提名、全国英语翻译比赛三等奖、山东省蓝桥杯java大学生B组三等奖…

C++基础:KMP

让我们先看一个问题:给定一个字符串 S,以及一个模式串 P,所有字符串中只包含大小写英文字母以及阿拉伯数字。模式串 P 在字符串 S 中多次作为子串出现。求出模式串 P 在字符串 S 中所有出现的位置的起始下标。输入格式第一行输入整数 N&#…

【Python】杨辉三角中的排成一列编号的问题

题目描述 下面的图形是著名的杨辉三角形: 如果我们按从上到下、从左到右的顺序把所有数排成一列,可以得到如下数列: 1,1,1,1,2,1,1,3,3,1,1,4,6,4,1,⋯ 给定一个正整数 N,请你输出数列中第一次出现 N是在第几个数? …

Go语言设计与实现 -- 内存管理器

不同的编程语言选择不同的方式管理内存,本节会介绍Go语言内存分配器。 Go内存分配的设计思想是: 内存分配算法采用Google的TCMalloc算法,每个线程都会自行维护一个独立的内存池,进行内存分配时优先从该内存池中分配,…

第十八章Vue的学习

文章目录什么是VueVue.js的官网介绍环境配置基本语法声明式渲染绑定元素属性双向数据绑定条件渲染列表渲染事件驱动侦听属性Vue对象生命周期什么是Vue 对于Java程序来说,我们使用框架就是导入那些封装了**『固定解决方案』的jar包,然后通过『配置文件』…

CSS3 之选择器

文章目录1、关系性选择器:EFE~F2、属性选择器3、伪元素选择器4、伪类选择器(被选中的元素的一个种状态)calc1、关系性选择器:EFE~F 2、属性选择器 E[attr~“val”]E[attr|“val”]E[attr^“val”]E[attr$“val”]E[attr*“val”]3、伪元素选择器 E::pl…

CesiumLab对BIM模型的输入格式要求 CesiumaLab系列教程

BIM 模型和手工模型最大的区别在于几点: 1.建模目标不同,手工模型的目的是为了可视化,就是为了看的见,看不见的东西能省则省。BIM 完全是按照一些工程标准去创建的,比如路面可能有多个层代表了不同的物理层。手工模型…

windows编译Paraview源码

目录一. 环境准备二. 编译1. CMake2. Visual Studio一. 环境准备 下载基本所需: paraview官方给了编译文档:https://github.com/Kitware/ParaView/blob/master/Documentation/dev/build.md 所需要的基础有: 如图:(进入…

2022我的年度总结-- AI遮天之路

我是一个普普通通的大学生,我的博客记录了我学习编程以来共计1年多的水平,我希望能把自己大学的经历、选择、困惑等与同样身处大学,选择AI方向不知如何发展的人进行分享,因此写了这篇年终总结。另外,对于一些刚刚开始写…

重磅!华为更新职业认证架构刷新和重认证规则

尊敬的各位朋友,感谢您一直以来对华为认证的支持! 为匹配华为公司未来长期战略,紧随ICT技术演进趋势,自2023年1月1日起,华为职业认证将启用全新的架构体系和重认证规则,请您关注。 华为职业认证架构刷新 …

新年新希望--爱摸鱼的美工(12)

年近了,上班途中依然匆忙 看女孩子们渐渐开始倒腾 做了新发型,做了美美的指甲 换上了新衣服,买了新包 电话里讨论着 去哪里过年,买什么年货 好像以前的我也这样 今年挣得少了,不想添新衣(不能) …

【条理清晰】在 Windows 上安装 MySQL

下载 MySQL 安装程序安装 MySQL 数据库安装示例数据库下载 MySQL 安装程序 在本教程中,我们展示如何在 Windows 平台上下载和安装 MySQL 的详细步骤。 在 Windows 平台上安装 MySQL 很简单,并不需要太复杂的步骤。按照本文的步骤操练起来就可以了。 我…

一体化Ethercat通信伺服电机在汇川H5U PLC上的应用案例介绍(下)

内容介绍了一体化低压伺服Ethercat通信的电机在汇川H5UPLC上的使用,一体化Ethercat通信伺服电机在汇川H5U PLC上的应用案例介绍(上)主要讲解环境的搭建以及使用AutoShop软件的在线调试功能,简单控制电机位置、速度模式运行。那么本篇我们就来讲解下使用汇…

【Kotlin】空安全 ② ( 手动空安全管理 | 空安全调用操作符 ? | let 函数结合空安全调用操作符使用 )

文章目录一、手动空安全管理二、空安全调用操作符 ?三、let 函数结合空安全调用操作符使用一、手动空安全管理 Kotlin 语言中 , 变量类型 分为 可空类型 和 非空类型 , 默认状态 下 , 变量是 非空类型 的 , 如果使用 类型? 将变量声明为 可空类型 , 那么就需要使用 手动安…

【C语言进阶】动态内存管理

1. 为什么存在动态内存分配我们已经掌握的内存开辟方式有:int val 20;//在栈空间上开辟四个字节 char arr[10] {0};//在栈空间上开辟10个字节的连续空间但是上述的开辟空间的方式有两个特点:1. 空间开辟大小是固定的。2. 数组在申明的时候,…

JavaWeb复习

系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 例如:第一章 Python 机器学习入门之pandas的使用 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目…

【迅为iMX6Q】开发板 u-boot 2022.04 SD卡 启动

相关参考 【迅为iMX6Q】开发板 u-boot 2015.04 SD卡 启动 【迅为iMX6Q】开发板 u-boot 2020.04 SD卡 启动 开发环境 win10 64位VMware Workstation Pro 16ubuntu 22.04【迅为imx6q】开发板, 2G DDR uboot-imx 下载 使用 NXP 官方提供的 uboot-imx,代…

TreeList-关闭默认显示的右击菜单

需要给控件添加自定义的右击菜单,所以就造成了冲突,导致右击时只弹出控件自带的菜单而没弹出我自定义的菜单,现在把关闭默认菜单的方法记录一下