数据在内存中的存储(整型与浮点数类型)

news2024/11/17 2:33:07

目录

数据类型详细介绍

数据类型介绍

数据类型的基本归类

整型在内存中的存储

原码、反码、补码

​编辑

大小端介绍

例题

浮点型在内存中的存储

常见的浮点数

浮点数存储的例子(具体解析浮点数存储)

解析最初的例题


数据类型详细介绍

 数据类型介绍

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

类型的意义:

1.使用这个类型开辟内存空间的大小(大小决定了使用范围)

2.如何看待内存空间的视角

数据类型的基本归类

整型家族:

char               //底层存储的是ASCII码值,也是个整数
    unsigned char
    signed char
short
    unsigned short[int]
    signed short[int]
int 
    unsigned int
    signed int
long
    unsigned long[int]
    signed long[int]

浮点数家族:

float
double

构造类型:

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

指针类型:

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

空类型:

void 表示空类型(无类型)

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


整型在内存中的存储

原码、反码、补码

计算机中的有符号数有三种表示方法,即原码、反码和补码

三种表示方法均有符号位和数值位两部分,符号位都是用0表示“正”,用1表示“负”,而数值位三种表示方法各不相同。

原码:

直接将符号数按照正负数的形式翻译成二进制就可以

反码:

将原码的符号位不变,其他位依次按位取反就可以得到了。

补码:

反码+1就得到补码

正数的原码、反码、补码都相同

对于整型来说:数据存放内存中其实存放的是补码

 下图为-10在内存中的补码表示(16进制、小端存储):

大小端介绍

什么是大端小端:

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

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

大小端存在的原因:

 如何判断当前机器的字节序(大小端):

//判断当前机器的字节序
int main() {
	int a = 1;//小端为01 00 00 00,大端为00 00 00 01
	char* p = (char *)&a;//&a为int*型,需要强制类型转换,char类型指针正好访问第一个字节
	if (*p == 1) {
		printf("小端");
	}
	else
	{
		printf("大端");
	}
	return 0;
}

例题

//输出什么?
int main() {
	char a = -1;
	//原码:10000000000000000000000000000001
	//反码:11111111111111111111111111111110
	//补码:11111111111111111111111111111111
	//11111111(char只存一个字节,后八位)
	//发生整型提升:11111111111111111111111111111111=-1

	signed char b = -1;
	//11111111(char只存一个字节,后八位)
	//发生整型提升:11111111111111111111111111111111=-1
	unsigned char c = -1;
	//11111111(char只存一个字节,后八位)
	//发生整型提升:00000000000000000000000011111111=255(无符号高位补0)
	//正数原码补码相同
	printf("a=%d,b=%d,c=%d", a, b, c);//-1 -1 255

	return 0;
}
int main() {
	char a = -128;
	//10000000000000000000000010000000(原)
	//11111111111111111111111101111111(反)
	//11111111111111111111111110000000(补)
	//char-10000000
	//整型提升11111111111111111111111110000000
	printf("%u\n", a);//%u无符号十进制数字(原补码相同)
	//11111111111111111111111110000000=4,294,967,168

	return 0;
}
int main() {
	char a = 128;//超出范围,发生截断
	//00000000000000000000000010000000(原)
	//char-10000000=-128
	//整型提升11111111111111111111111110000000
	printf("%u\n", a);//%u无符号十进制数字
	//11111111111111111111111110000000=4,294,967,168

	return 0;
}
int main() {
	int i = -20;
	//10000000000000000000000000010100
	//11111111111111111111111111101011
	//11111111111111111111111111101100
	unsigned int j = 10;
	//00000000000000000000000000001010
	printf("%d\n", i + j);
	//11111111111111111111111111110110(补码)
	//11111111111111111111111111110101(反码)
	//10000000000000000000000000001010(原码)=-10

	return 0;
}
int main() {
	unsigned int i;
	for (i = 9; i >=0; i--) {
		printf("%u\n", i);
	}//死循环,因为判断条件有=0,而无符号整型永远不会<0


	return 0;
}
int main() {
	char a[1000];//char类型取值范围(-128~127)/(10000000~01111111)
	int i;
	for (i = 0; i < 1000; i++) {
		a[i] = -1 - i;
	}//-1 -2 -3 ...-127 -128 127 126...3 2 1 0 -1 -2 ...
	printf("%d", strlen(a));//访问到0即\0,会停止访问,所以输出128+127=255


	return 0;
}
unsigned char i = 0;//unsigned char取值范围(0~255)(00000000~11111111)
int main() {
	for (i = 0; i <= 255; i++) {//永远小于等于255,陷入死循环
		printf("hello world\n");
	}
	return 0; 
}

浮点型在内存中的存储

常见的浮点数

3.14159  1E10浮点数家族包括:float、double、long double类型。浮点数表示的范围:float.h中定义

浮点数存储的例子(具体解析浮点数存储)

//浮点数和整数在内存中的存储有区别
int main() {
	//整数的形式存储,浮点数的形式读取
	int n = 9;
	float* pFloat = (float*)&n;
	printf("n的值为:%d\n", n);//9
	printf("pFloat的值为:%f\n", *pFloat);//0.000000

	//浮点数的形式存储,整数的形式读取
	*pFloat = 9.0;
	printf("n的值为:%d\n", n);//1091567616
	printf("pFloat的值为:%f\n", *pFloat);//9.000000

	return 0;                                                             

}

原因(此题下方有具体解析):

 

 

 

  例:

int main() {
	float f = 5.5f;
	//101.1
	//1.011 * 2^2
	//s=0 M=011 E=2
	//s=0 M=011 E=2+127
	//
	//0100 0000 1011 0000 0000 0000 0000 0000
	//40 b0 00 00
	return 0;


}

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

 

 

解析最初的例题

int main() {
	
	int n = 9;
	//00000000000000000000000000001001
	float* pFloat = (float*)&n;
	printf("n的值为:%d\n", n);//9
	printf("pFloat的值为:%f\n", *pFloat);//0.000000
	//00000000000000000000000000001001(内存认为是浮点数存储形式)
	//0(s)    00000000(E)     00000000000000000001001(M)
	//E为全0    +0.00000000000000000001001*2^(-126)
	//只打印小数点后6位
	*pFloat = 9.0;
	//1001.0
	//1.001*2^3   E=3
	//0(s)   10000010(E)      00100000000000000000000(M)
	printf("n的值为:%d\n", n);//1091567616
	//01000001000100000000000000000000(内存认为是整数数存储形式)
	//01000001000100000000000000000000=1,091,567,616(正数补码与原码相同)
	printf("pFloat的值为:%f\n", *pFloat);//9.000000
	

	return 0;

}

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

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

相关文章

问题:Feem无法发送信息OR无法连接(手机端无法发给电脑端)

目录 前言 问题分析 资源、链接 其他问题 前言 需要在小米手机、华为平板、Dell电脑之间传输文件&#xff0c;试过安装破解的华为电脑管家、小米的MIUI文件传输等&#xff0c;均无果。&#xff08;小米“远程管理”ftp传输倒是可以&#xff0c;但速度太慢了&#xff0c;且…

小程序商城开通指南:揭秘电商新零售的崛起之路!

随着移动设备的普及和微信小程序的迅速流行&#xff0c;电商行业正在经历前所未有的变革。小程序商城作为新兴的电商模式&#xff0c;因其无需下载安装、方便易用等特点&#xff0c;为企业和个人创造了崭新的商业机会。本文将为您详细介绍如何开通小程序商城&#xff0c;涵盖准…

从matlab的fig图像文件中提取数据

这里用的是openfig&#xff08;&#xff09;函数打开的fig文件 →→→【matlab 中 fig 数据提取】 很简洁 →→→【MATLAB提取 .fig 文件中的数据】 这个给出了包含多个曲线的情况 →→→【提取matlab fig文件里的数据和legend】 chatgpt给出的方法 打开fig文件并保存数据 我的…

【LLM】Prompt微调

Prompt 在机器学习中&#xff0c;Prompt通常指的是一种生成模型的输入方式。生成模型可以接收一个Prompt作为输入&#xff0c;并生成与该输入相对应的输出。Prompt可以是一段文本、一个问题或者一个片段&#xff0c;用于指导生成模型生成相应的响应、续写文本等。 Prompt优化…

C++类与对象【友元】

&#x1f308;个人主页&#xff1a;godspeed_lucip &#x1f525; 系列专栏&#xff1a;C从基础到进阶 &#x1f384;1 友元&#x1f951;1.1 全局函数做友元&#x1f951;1.2 类做友元&#x1f951;1.3 成员函数做友元 &#x1f56e;2 总结 &#x1f384;1 友元 生活中你的家…

热轧钢板、钢管测长仪 高温检测无压力

热轧钢管、钢板等轧材温度是非常高的&#xff0c;在线测长仪可对其进行在线检测&#xff0c;实现生产中的测量&#xff0c;同时也可给剪切机输送数据&#xff0c;帮助裁切。 测长仪是基于机器视觉的测量设备&#xff0c;能够拍摄被测物的清晰图片&#xff0c;并显示&#xff0c…

python数字图像处理基础(十二)——银行卡识别

目录 实战-银行卡识别理论部分补充介绍 代码部分 实战-银行卡识别 理论部分 1.总体思路 首先把模板中的数字单个分离开&#xff0c;再提取银行卡上的ROI&#xff0c;再将两者的二值图像进行模板匹配&#xff0c;确定出每一个数字&#xff0c;即实现了银行卡号识别 补充介绍 …

C++ 之LeetCode刷题记录(十四)

&#x1f604;&#x1f60a;&#x1f606;&#x1f603;&#x1f604;&#x1f60a;&#x1f606;&#x1f603; 开始cpp刷题之旅。 依旧是追求耗时0s的一天。 88. 合并两个有序数组 给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2&#xff0c;另有两个整数 m 和 n &…

VUE表单中多个el-upload上传组件共享回调函数解决方案

产品需求界面&#xff1a; 在产品配置页面表单中需要上传多个图片&#xff0c;项目中上传组件采用Element Plus 中的 el-upload&#xff0c;目前问题是每个上传组件都需要实现自己的回调&#xff0c;比如:on-change&#xff0c;采用官方推荐标准代码如下&#xff1a; <el-fo…

计算机报错mfc100.dll丢失的修复教程,一招搞定电脑找不到dll问题

MFC100.dll是Microsoft Foundation Class Library中的一个动态链接库文件&#xff0c;它是Visual Studio开发环境中用于支持Windows应用程序开发的组件之一。它包含了许多常用的类、函数和资源&#xff0c;为开发人员提供了一种方便的方式来构建和管理Windows应用程序的用户界面…

贝塞尔曲线(Bezier Curve)原理、公式推导及matlab代码实现

目录 参考链接 定义 直观理解 公式推导 一次贝塞尔曲线&#xff08;线性公式&#xff09; 二次贝塞尔曲线&#xff08;二次方公式&#xff09; 三次贝塞尔曲线&#xff08;三次方公式&#xff09; n次贝塞尔曲线&#xff08;一般参数公式&#xff09; 代码实现 参考链接…

设备树(1)-设备树是什么?设备树基础概念及语法

1.简介 设备树&#xff1a;device tree DTS&#xff1a;设备树源码文件&#xff0c;采用树形结构描述板级信息&#xff0c;例如IIC、SPI等接口接了哪些设备 DTSI&#xff1a;设备树头文件&#xff0c;描述SOC级信息&#xff0c;例如几个CPU、主频多少、各个外设控制信息等 DTB…

PPT 编辑模式滚动页面不居中

PPT 编辑模式滚动页面不居中 目标&#xff1a;编辑模式下适应窗口大小、切换页面居中显示 调整视图大小&#xff0c;编辑模式通过Ctrl 鼠标滚轮 或 在视图菜单中点击适应窗口大小。 2. 翻页异常&#xff0c;调整视图大小后&#xff0c;PPT翻页但内容不居中或滚动&#xff0c…

高并发缓存问题分析以及分布式锁的实现

一,场景概述: 在高并发的环境下,比如淘宝,京东不定时的促销活动,大量的用户访问会导致数据库的性能下降,进而有可能数据库宕机从而不能产生正常的服务,一般一个系统最大的性能瓶颈&#xff0c;就是数据库的io操作,如果发生大量的io那么他的问题也会随之而来。从数据库入手也是…

卸载文件后,注册表如何删除干净

我今天遇到一个问题&#xff0c;卸载geoserver之后&#xff0c;无法再次安装&#xff0c;提示&#xff1a; geoserver has already been installed on your system. please remove that ersion if you wish to update or re-install.我猜是注册表没有删除干净&#xff0c;但是…

【算法练习】leetcode算法题合集之栈和队列篇

普通栈 LeetCode20 有效的括号 LeetCode20 有效的括号 定义一个辅助map&#xff0c;判断字符串的字符是否在]})中。一旦是右括号就要弹出元素&#xff0c;判断匹配。 class Solution {public boolean isValid(String s) {if (s.length() % 2 1) {return false;}Map<Chara…

Halcon基于形变的模板匹配

Halcon基于形变的模板匹配 形变分为两种&#xff0c;一种是基于目标局部的形变&#xff0c;另一种是由于透视关系而产生的形变。基于形变的模板匹配也是一种基于形状的匹配方法&#xff0c;但不同的是&#xff0c;其返回结果中不仅包括轻微形变的形状.形变的位置和参数&#x…

git中的语法和术语含义

目录 第一章、git常用术语1.1&#xff09;文件状态1.2&#xff09;git常用术语的含义 第二章、git文件状态解析2.1&#xff09;从git init开始&#xff1a;Untracked&#xff08;未跟踪&#xff09;2.2&#xff09;git add fileName后&#xff1a;Staged&#xff08;已暂存&…

【计算机网络】2、传输介质、通信方向、通信方式、交换方式、IP地址表示、子网划分

文章目录 传输介质双绞线无屏蔽双绞线UTP屏蔽双绞线STP 网线光纤多模光纤MMF单模光纤SMF 无线信道无线电波红外光波 通信方向单工半双工全双工 通信方式异步传输同步传输串行传输并行传输 交换方式电路交换报文交换分组交换 IP地址表示IP地址的定义IP地址的分类无分类编址特殊I…

统计学R语言实验8 :线性回归

统计学R语言实验8 &#xff1a;线性回归 一、实验目的 1. 掌握理解线性回归的相关概念。 2. 掌握理解线性回归的相关方法。 3. 熟悉R语言等语言的集成开发环境。 二、实验分析与内容 完成教材P132的第2题 散点图 将 shouru 向量作为 x 轴&#xff0c;zhichu 向量作为 y 轴…