当前位置: 首页 > news >正文

笔记二:整数和浮点数在内存中存储

目录

一、数据类型介绍

二、类型的基本归类

1.整形家族:

2.浮点数家族:

 3.构造类型:

 4.指针类型

 5.空类型:

 三、整形在内存中的存储

3.1  原码,反码、补码

3.2  大小端介绍

四、浮点数在内存中的存储

​编辑 4.1浮点数的存放

4.2浮点数取出的过程


一、数据类型介绍

        基本的内置类型:
char         //字符数据类型     
short       //短整型                 
int         // 整形
long         // 长整型
long long   // 更长的整形
float       // 单精度浮点数
double       // 双精度浮点数

         通过下面的代码技术它们在不同平台下的存储空间大小:

int main() {printf("64位平台: \n");printf("char类型:       %d(字节)\n", sizeof(char));printf("short类型:      %d(字节)\n", sizeof(short));printf("int类型:		 %d(字节)\n", sizeof(int));printf("long类型:		 %d(字节)\n", sizeof(long));printf("long long类型:   %d(字节)\n", sizeof(long long));printf("float类型:       %d(字节)\n", sizeof(float));printf("double类型:      %d(字节)\n", sizeof(double));return 0;
}运行结果:
64位平台:
char类型:       1(字节)
short类型:      2(字节)
int类型:        4(字节)
long类型:       4(字节)
long long类型:   8(字节)
float类型:       4(字节)
double类型:      8(字节)
int main() {printf("32位平台: \n");printf("char类型:       %d(字节)\n", sizeof(char));printf("short类型:      %d(字节)\n", sizeof(short));printf("int类型:		 %d(字节)\n", sizeof(int));printf("long类型:		 %d(字节)\n", sizeof(long));printf("long long类型:   %d(字节)\n", sizeof(long long));printf("float类型:       %d(字节)\n", sizeof(float));printf("double类型:      %d(字节)\n", sizeof(double));return 0;
}运行结果:
32位平台:
char类型:       1(字节)
short类型:      2(字节)
int类型:        4(字节)
long类型:       4(字节)
long long类型:   8(字节)
float类型:       4(字节)
double类型:      8(字节)

         vs2022中long 类型在64位和32位都占4个字节,但是在有些环境中的64位会占8个字节。

类型的意义:
  • 使用这个类型开辟内存空间的大小(大小决定了使用范围)。
  • 如何看待内存空间的视角

二、类型的基本归类

1.整形家族:

char
                unsigned char
                signed char
short
                unsigned short [int]
                signed short [int]
int
                unsigned int
                signed int
long
                unsigned long [int]
                signed long [int]

2.浮点数家族:

float
double
        long double

 3.构造类型:

> 数组类型
> 结构体类型 struct
> 枚举类型 enum
> 联合类型 union

 4.指针类型

int * pi ;
char * pc ;
float* pf ;
void* pv ;

 5.空类型:

 void 表示空类型(无类型)

通常应用于函数的返回类型、函数的参数、指针类型

 三、整形在内存中的存储

3.1  原码,反码、补码

         整数在内存中有三种表示方法:原码、反码、补码。

        三种表示方法均有符号位和 数值位 两部分,符号位都是用 0 表示 ,用 1 表示 ”,而数值位
正数的原、反、补码都相同。
        负整数的三种表示方法各不相同        
  • 原码:直接将数值按照正负数的形式翻译成二进制就可以得到原码。
  • 反码:将原码的符号位不变,其他位依次按位取反就可以得到反码。
  • 补码:反码+1就得到补码

        其中正整数的原反补相同

        整数在内存中都是以补码的形式存储的。因为使用补码可以将符号位和数值位统一处理;可以将加法和减法做统一处理(CPU只有加法器);补码和源码的互相转换的运算过程是相同的,不需要额外的硬件电路。

        观察下面两个整型变量在内存中的存储:

 我们可以看到对于ab分别存储的是补码。但是我们发现顺序有点不对劲.

3.2  大小端介绍

        什么大端小端:

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

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

         那为什么会存在大小端呢?

        为什么会有大小端模式之分呢?这是因为在计算机系统中,我们是以字节为单位的,每个地址单元都对应着一个字节,一个字节为8 bit。但是在 C 语言中除了 8 bit char 之外,还有 16 bit short 型,32 bit long 型(要看具体的编译器),另外,对于位数大于 8 位的处理器,例如 16 位或者 32 位的处理器,由于寄存器宽度大于一个字节,那么必然存在着一个如何将 多个字节安排的问题 。因此就导致了大端存储模式和小端存储模式。
        例如:一个 16bit short x ,在内存中的地址为 0x0010 x 的值为 0x1122 ,那么 0x11 为 高字节, 0x22 为低字节。对于大端模式,就将 0x11 放在低地址中,即 0x0010 0x22 放在高 地址中,即 0x0011 中。小端模式,刚好相反。我们常用的 X86 结构是小端模式,而 KEIL C51 则 为大端模式。很多的ARM DSP 都为小端模式。有些 ARM 处理器还可以由硬件来选择是大端模式 还是小端模式。

        判断当前机器的字节序为大端 or 小端

#include <stdio.h>
int check_sys()
{int i = 1;//提取整型的地址,用char类型的指针进行截断,如果为大端数据低位存储在高地址,返回值为0//而小端数据低位存储在低地址,返回值为1return (*(char*)&i);  
}
int main()
{int ret = check_sys();if (ret == 1){printf("小端\n");}else{printf("大端\n");}return 0;
}

四、浮点数在内存中的存储


        根据国际标准IEEE(电气和电子工程协会) 754,任意一个二进制浮点数V可以表示成下面的形式:

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

例如:

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

        十进制的-5.0,写成二进制是 -101.0 ,相当于 -1.01×2^2 。那么,S=1M=1.01E=2

         对于32位的浮点数,最高的1位是符号位S,接着的8位是指数E,剩下的23位为有效数字M

        对于64位的浮点数,最高的1位是符号位S,接着的11位是指数E,剩下的52位为有效数字M

 4.1浮点数的存放

        M的存放:对于有效数字M,由于M是恒大于等于1、小于2的,因此M存放在内存中的时候可以省略小数点前面的1,只存放小数点后面的数字。

        E的存放:因为E是一个无符号整数,如果它是8位,则它的取值范围是0~255;如果他是11位,则它的取值范围是0~2047。但是,在科学计数法中,E是可以为负数的。所以,IEEE 754标准规定:当E存入内存时需要再加上一个中间数,对于8位的E,要加上127;对于11位的E要加上1023。

4.2浮点数取出的过程

        浮点数取出时,M和S都可以正常拿取,但是,E有很多种不同情况: 

        当E不为全0或不为全1时:此时,对于单精度浮点数来说,E需要减去127;对于双精度浮点数来说,E的值还需要减去1023。M再在前面加上1和小数点。

        当E为全0时:因为E是加上127(或1023)后再放入内存中的,因此,此时的E减去127或1023后则为-127或-1023,该浮点数的指数就为2^(-127)或者2^(-1023)这是一个很小的数字,无限接近于0,则表示为正负0,以及接近0的很小的数字。

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

       并不是所有的浮点数在内存中都能够精确的存储的,有些浮点数只能够近似表示。因此我们在比较浮点数大小时,不能够直接用==来比较大小,规定好允许的误差范围,然后再判断要比较的数相减的绝对值是否在误差允许的范围内即可

int main() {float a = 96.99;printf("%f", a);return 0;
}运行结果:
96.989998

相关文章:

笔记二:整数和浮点数在内存中存储

目录 一、数据类型介绍 二、类型的基本归类 1.整形家族&#xff1a; 2.浮点数家族&#xff1a; 3.构造类型&#xff1a; 4.指针类型 5.空类型&#xff1a; 三、整形在内存中的存储 3.1 原码&#xff0c;反码、补码 3.2 大小端介绍 四、浮点数在内存中的存储 ​编辑 4.…...

PyQT(PySide)的上下文菜单策略设置setContextMenuPolicy()

在 Qt 中&#xff0c;QWidget 类提供了几种不同的上下文菜单策略&#xff0c;这些策略通过 Qt::ContextMenuPolicy 枚举类型来定义&#xff0c;用于控制控件&#xff08;如按钮、文本框等&#xff09;在用户右键点击时如何显示上下文菜单。 以下是 Qt::ContextMenuPolicy 枚举中…...

BladeX框架接口请求跨域

前端使用代理请求接口&#xff0c;接口可以正常访问。如果换全路径请求就跨域。 除了后端要配置跨域 还需要修改配置文件对OPTIONS请求的限制...

如何在Apple不再支持的MacOS上安装Homebrew

手头有一台2012年产的Macbook Pro&#xff0c;系统版本停留在了10.15.7&#xff08;2020年9月24日发布的&#xff09;。MacOS 11及后续的版本都无法安装到这台老旧的电脑上。想通过pkg安装Homebrew&#xff0c;发现Homebrew releases里最新的pkg安装包不支持MacOS 10.15.7&…...

本地大模型编程实战(26)用langgraph实现基于SQL数据构建的问答系统(5)

本文将将扩展上一篇文章完成的 langgraph 链&#xff0c;继续使用基于 langgraph 链 &#xff0c;对结构化数据库 SQlite 进行查询的方法。该系统建立以后&#xff0c;我们不需要掌握专业的 SQL 技能&#xff0c;可以用自然语言询问有关数据库中数据的问题并返回答案。主要完善…...

数据结构与算法:滑动窗口

前言 滑动窗口一般主要用于解决子数组或子串问题&#xff0c;这类的题目更看重对题目的分析和转化。 一、原理 在整个数组上&#xff0c;用l和r分别控制窗口的左右边界&#xff0c;r就扩大&#xff0c;l就减小。 当窗口的范围和题目中某个指标间存在单调关系时&#xff0c;…...

江协科技/江科大-51单片机入门教程——P[2-1] 点亮一个LED

本节将向大家介绍如何用 51 单片机去控制开发板上的 LED。开发板上的 LED 位置标注有 “LED 模块”。 第二章要写 3 个程序代码&#xff1a;第一个代码实现点亮开发板上的第一个 LED&#xff1b;第二个代码让第一个 LED 以 1 秒为周期闪烁&#xff1b;第三个代码使 8 个 LED 以…...

leetcode hot 100 41. 缺失的第一个正数

代码 测试用例 测试用例 测试结果 41. 缺失的第一个正数 已解答 困难 相关标签 相关企业 提示 给你一个未排序的整数数组 nums &#xff0c;请你找出其中没有出现的最小的正整数。 请你实现时间复杂度为 O(n) 并且只使用常数级别额外空间的解决方案。 示例 1&#xf…...

UniApp 使用 u-loadmore 完整步骤

文章目录 一、前期准备1. 安装 uView - UI 二、使用 u-loadmore组件1. 创建页面2. 编写页面代码模板部分&#xff08;loadmore-demo.vue&#xff09;样式部分脚本部分 三、要点补充1. u-loadmore 状态说明2. 数据请求优化3. 性能优化4. 兼容性问题 在 UniApp 开发中&#xff0c…...

设置电脑一接通电源就主动开机

文章目录 1、进入BIOS2、设置4、功能弊端5、电脑自动开机的设置 1、进入BIOS 在电脑重启时&#xff0c;这时屏幕上会显示按XXX键到BIOS界面 没有进入BIOS提示的&#xff0c;按下面方法操作&#xff1a; 方法一 在开机显示logo的时候&#xff0c;立即按下面这几个按键&#xf…...

优艾智合机器人日本子公司成立,加速推进国际化布局

2月27日&#xff0c;工业移动机器人解决方案商优艾智合宣布日本子公司Youibot Robotics Japan株式会社&#xff08;以下简称“Youibot Japan”&#xff09;成立&#xff0c;并于东京举行开业典礼。此举标志着优艾智合在日本市场的现地服务能力进一步深化&#xff0c;是其全球化…...

自然语言处理NLP入门 -- 第七节预训练语言模型

1 什么是预训练模型&#xff1f; 在自然语言处理&#xff08;NLP&#xff09;里&#xff0c;训练一个好模型通常需要很多数据和计算资源。为了解决这个难题&#xff0c;就出现了“预训练模型”。 预训练模型 是指我们先在海量文本&#xff08;比如网络上爬到的大量文章、对话…...

Git GitHub基础

git是什么&#xff1f; Git是一个分布式版本控制系统&#xff0c;用于管理源代码的变更。它允许多个开发者在同一个项目上协作&#xff0c;同时跟踪每个修改的历史记录。 关键词&#xff1a; 分布式版本控制软件 软件 安装到我们电脑上的一个工具 版本控制 例如论文&…...

多平台文章同步工具PostSync 安装介绍

PostSync 是一个开源的用于多平台文章同步的工具 环境安装 安装 Python&#xff1a;PostSync 是基于 Python 开发的&#xff0c;你需要确保系统中已经安装了 Python 环境&#xff0c;建议使用 Python 3.7 及以上版本。你可以从 Python 官方网站 下载并安装适合你操作系统的版…...

PXE批量网络装机与Kickstart自动化安装工具

目录 一、系统装机的原理 1.1、系统装机方式 1.2、系统安装过程 二、PXE批量网络装机 2.1、PXE实现原理 2.2、搭建PXE实际案例 2.2.1、安装必要软件 2.2.2、搭建DHCP服务器 2.2.3、搭建TFTP服务器 2.2.4、挂载镜像并拷贝引导文件到tftp服务启动引导文件夹下 2.2.5、编…...

css的复合选择器

1.1什么是复合选择器 在css中&#xff0c;选择器分为基础选择器和复合选择器&#xff0c;复合选择器是建立在基础选择器之上&#xff0c;对基本选择器进行组合形成。 复合选择器可以更准确、更高效的选择目标元素(标签)由两个或多个基础选择器&#xff0c;通过不同的方式组合…...

Wireshark Lua 插件教程

本⽂主要介绍 Lua 脚本在 Wireshark 中的应⽤, Lua 脚本可以在 Wireshark 中完成如下功能: 从⽹络包中提取数据, 或者统计⼀些数据包(Dumper) 需要解析⼀种 Wireshark 不提供原⽣⽀持的协议(Dissector) ⽰例 协议解析 VREP 协议是 NOGD 框架对于 TRIP 协议的⼀种延伸和扩展…...

mysql怎样优化where like ‘%字符串%‘这种模糊匹配的慢sql

一 问题描述 工作中经常遇到这种模糊匹配的慢sql&#xff1a; select * from 表名 where 字段 like %字符串%; 由于前面有%&#xff0c;导致无法走该字段上的索引。 二 解决办法 ① 给该字段创建一个全文索引 CREATE FULLTEXT INDEX 索引名 ON 表名 (字段名); ② 改写sq…...

Python代码片段-断点任务

使用Python处理一堆长耗时任务的时候&#xff0c;为了防止异常退出程序或者手动退出程序后丢失任务进度&#xff0c;可用使用断点的方式记录任务进度&#xff0c;下次重载任务后&#xff0c;继续运行上次未完成的任务即可。 这里用json文件作为数据持久化的方式&#xff0c;免…...

mapbox基础,使用geojson加载heatmap热力图层

👨‍⚕️ 主页: gis分享者 👨‍⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍⚕️ 收录于专栏:mapbox 从入门到精通 文章目录 一、🍀前言1.1 ☘️mapboxgl.Map 地图对象1.2 ☘️mapboxgl.Map style属性1.3 ☘️heatmap热力图层样式二、🍀使用geojs…...

Docker 离线安装指南

参考文章 1、确认操作系统类型及内核版本 Docker依赖于Linux内核的一些特性&#xff0c;不同版本的Docker对内核版本有不同要求。例如&#xff0c;Docker 17.06及之后的版本通常需要Linux内核3.10及以上版本&#xff0c;Docker17.09及更高版本对应Linux内核4.9.x及更高版本。…...

conda相比python好处

Conda 作为 Python 的环境和包管理工具&#xff0c;相比原生 Python 生态&#xff08;如 pip 虚拟环境&#xff09;有许多独特优势&#xff0c;尤其在多项目管理、依赖处理和跨平台兼容性等方面表现更优。以下是 Conda 的核心好处&#xff1a; 一、一站式环境管理&#xff1a…...

java_网络服务相关_gateway_nacos_feign区别联系

1. spring-cloud-starter-gateway 作用&#xff1a;作为微服务架构的网关&#xff0c;统一入口&#xff0c;处理所有外部请求。 核心能力&#xff1a; 路由转发&#xff08;基于路径、服务名等&#xff09;过滤器&#xff08;鉴权、限流、日志、Header 处理&#xff09;支持负…...

在鸿蒙HarmonyOS 5中实现抖音风格的点赞功能

下面我将详细介绍如何使用HarmonyOS SDK在HarmonyOS 5中实现类似抖音的点赞功能&#xff0c;包括动画效果、数据同步和交互优化。 1. 基础点赞功能实现 1.1 创建数据模型 // VideoModel.ets export class VideoModel {id: string "";title: string ""…...

376. Wiggle Subsequence

376. Wiggle Subsequence 代码 class Solution { public:int wiggleMaxLength(vector<int>& nums) {int n nums.size();int res 1;int prediff 0;int curdiff 0;for(int i 0;i < n-1;i){curdiff nums[i1] - nums[i];if( (prediff > 0 && curdif…...

[ICLR 2022]How Much Can CLIP Benefit Vision-and-Language Tasks?

论文网址&#xff1a;pdf 英文是纯手打的&#xff01;论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误&#xff0c;若有发现欢迎评论指正&#xff01;文章偏向于笔记&#xff0c;谨慎食用 目录 1. 心得 2. 论文逐段精读 2.1. Abstract 2…...

在鸿蒙HarmonyOS 5中使用DevEco Studio实现录音机应用

1. 项目配置与权限设置 1.1 配置module.json5 {"module": {"requestPermissions": [{"name": "ohos.permission.MICROPHONE","reason": "录音需要麦克风权限"},{"name": "ohos.permission.WRITE…...

uniapp中使用aixos 报错

问题&#xff1a; 在uniapp中使用aixos&#xff0c;运行后报如下错误&#xff1a; AxiosError: There is no suitable adapter to dispatch the request since : - adapter xhr is not supported by the environment - adapter http is not available in the build 解决方案&…...

selenium学习实战【Python爬虫】

selenium学习实战【Python爬虫】 文章目录 selenium学习实战【Python爬虫】一、声明二、学习目标三、安装依赖3.1 安装selenium库3.2 安装浏览器驱动3.2.1 查看Edge版本3.2.2 驱动安装 四、代码讲解4.1 配置浏览器4.2 加载更多4.3 寻找内容4.4 完整代码 五、报告文件爬取5.1 提…...

均衡后的SNRSINR

本文主要摘自参考文献中的前两篇&#xff0c;相关文献中经常会出现MIMO检测后的SINR不过一直没有找到相关数学推到过程&#xff0c;其中文献[1]中给出了相关原理在此仅做记录。 1. 系统模型 复信道模型 n t n_t nt​ 根发送天线&#xff0c; n r n_r nr​ 根接收天线的 MIMO 系…...