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

目录

数据类型详细介绍

数据类型介绍

数据类型的基本归类

整型在内存中的存储

原码、反码、补码

​编辑

大小端介绍

例题

浮点型在内存中的存储

常见的浮点数

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

解析最初的例题


数据类型详细介绍

 数据类型介绍

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

类型的意义:

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

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

数据类型的基本归类

整型家族:

char               //底层存储的是ASCII码值,也是个整数unsigned charsigned char
shortunsigned short[int]signed short[int]
int unsigned intsigned int
longunsigned 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 01char* 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=-1signed char b = -1;//11111111(char只存一个字节,后八位)//发生整型提升:11111111111111111111111111111111=-1unsigned char c = -1;//11111111(char只存一个字节,后八位)//发生整型提升:00000000000000000000000011111111=255(无符号高位补0)//正数原码补码相同printf("a=%d,b=%d,c=%d", a, b, c);//-1 -1 255return 0;
}
int main() {char a = -128;//10000000000000000000000010000000(原)//11111111111111111111111101111111(反)//11111111111111111111111110000000(补)//char-10000000//整型提升11111111111111111111111110000000printf("%u\n", a);//%u无符号十进制数字(原补码相同)//11111111111111111111111110000000=4,294,967,168return 0;
}
int main() {char a = 128;//超出范围,发生截断//00000000000000000000000010000000(原)//char-10000000=-128//整型提升11111111111111111111111110000000printf("%u\n", a);//%u无符号十进制数字//11111111111111111111111110000000=4,294,967,168return 0;
}
int main() {int i = -20;//10000000000000000000000000010100//11111111111111111111111111101011//11111111111111111111111111101100unsigned int j = 10;//00000000000000000000000000001010printf("%d\n", i + j);//11111111111111111111111111110110(补码)//11111111111111111111111111110101(反码)//10000000000000000000000000001010(原码)=-10return 0;
}
int main() {unsigned int i;for (i = 9; i >=0; i--) {printf("%u\n", i);}//死循环,因为判断条件有=0,而无符号整型永远不会<0return 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=255return 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);//9printf("pFloat的值为:%f\n", *pFloat);//0.000000//浮点数的形式存储,整数的形式读取*pFloat = 9.0;printf("n的值为:%d\n", n);//1091567616printf("pFloat的值为:%f\n", *pFloat);//9.000000return 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 00return 0;}

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

 

 

解析最初的例题

int main() {int n = 9;//00000000000000000000000000001001float* pFloat = (float*)&n;printf("n的值为:%d\n", n);//9printf("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.000000return 0;}

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

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

相关文章

FPGA高端项目:Xilinx Artix7 系列FPGA纯verilog图像缩放工程解决方案 提供4套工程源码和技术支持

目录 1、前言版本更新说明给读者的一封信FPGA就业高端项目培训计划免责声明 2、相关方案推荐我这里已有的FPGA图像缩放方案本方案在Xilinx Kintex7 系列FPGA上的应用本方案在国产FPGA紫光同创系列上的应用本方案在国产FPGA高云系列上的应用 3、设计思路框架设计框图视频源选择o…

前台vue配置

前台 vue环境 1.傻瓜式安装node: 官网下载&#xff1a;https://nodejs.org/zh-cn/2.安装cnpm: >: npm install -g cnpm --registryhttps://registry.npm.taobao.org3.安装vue最新脚手架: >: cnpm install -g vue/cli注&#xff1a;如果2、3步报错&#xff0c;清除缓…

ClickHouse与Doris数据库比较

概述 都说“实践是检验真理的唯一标准”&#xff0c;光说不练假把式&#xff0c;那么本文就通过实际的测试来感受一下Doris和clickhouse在读写方面的性能差距&#xff0c;看看Doris盛名之下&#xff0c;是否真有屠龙之技&#xff1b;clickhouse长锋出鞘&#xff0c;是否敢缚苍…

JVM 如何判断一个对象可以被回收

Hi&#xff0c; 我是 浮生。 今天分享一道一线互联网公司必问的面试题。 ”JVM 如何判断一个对象可以被回收“ 关于这个问题&#xff0c;来看看高手的回答。 一、问题解析 在 JVM 里面&#xff0c;要判断一个对象是否可以被回收&#xff0c;最重要的是判断这个对象是否还在被…

Web3解密:区块链技术如何颠覆传统互联网

随着区块链技术的崛起&#xff0c;Web3正逐渐成为新一代互联网的代名词。它不再依赖中心化的权威机构&#xff0c;而是通过去中心化、透明、安全的特性&#xff0c;为用户带来更为开放和公正的互联网体验。本文将深入解密Web3&#xff0c;揭示区块链技术如何颠覆传统互联网的基…

ZABBIX根据IP列表,主机描述,或IP子网批量创建主机的维护任务

有时候被ZABBIX监控的主机可能需要关机重启等维护操作,为了在此期间不触发告警,需要创建主机的维护任务,以免出现误告警 ZABBIX本身有这个API可供调用(不同版本细节略有不同,本次用的ZABBIX6.*),实现批量化建立主机的维护任务 无论哪种方式(IP列表,主机描述,或IP子网)创建维护…

【C语言】linux内核ipoib模块 - ipoib_start_xmit

一、ipoib_start_xmit函数定义 static netdev_tx_t ipoib_start_xmit(struct sk_buff *skb, struct net_device *dev) {struct ipoib_dev_priv *priv ipoib_priv(dev);struct rdma_netdev *rn netdev_priv(dev);struct ipoib_neigh *neigh;struct ipoib_pseudo_header *phdr…

[AI]文心一言爆火的同时,ChatGPT-4.5的正确打开方式

前言 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家&#xff1a;https://www.captainbed.cn/z ChatGPT体验地址 文章目录 前言4.5key价格泄漏ChatGPT4.0使用地址ChatGPT正确打开方式最新功能语音助手存档…

STM32标准库开发——串口发送/单字节接收

USART基本结构 串口发送信息 启动串口一的时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);初始化对应串口一的时钟&#xff0c;引脚&#xff0c;将TX引脚设置为复用推挽输出。 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); GPIO_InitTypeDef GPIO_In…

css绘制下拉框头部三角(分实心/空心)

1:需求图: 手绘下拉框 带三角 2:网上查了一些例子,但都是实心的, 可参考,如图: (原链接: https://blog.csdn.net/qq_33463449/article/details/113375804) 3:简洁版的: a: 实心: <view class"angle"/>.angle{width:0;height:0;border-left: 10px solid t…

元宇宙:智慧城市建设的未来引擎与价值之源

在21世纪的技术大潮中&#xff0c;元宇宙的出现无疑是一场革命&#xff0c;其独特的概念与价值已经引发了全球范围内的关注。 作为新兴科技的前沿&#xff0c;元宇宙为智慧城市建设带来了无限的可能性和价值&#xff0c;有望成为未来城市发展的核心动力。 元宇宙&#xff0c;这…

【linux】Linux编辑器-vim

rz指令&#xff0c;sz指令 关于 rzsz 这个工具用于 windows 机器和远端的 Linux 机器通过 XShell 传输文件. 安装完毕之后可以通过拖拽的方式将文件上传过去 1.查看软件包 通过 yum list 命令可以罗列出当前一共有哪些软件包. 由于包的数目可能非常之多, 这里我们需要使用 grep…

GitHub 一周热点汇总第6期(2024/01/14-01/20)

GitHub一周热点汇总第6期 (2024/01/14-01/20) &#xff0c;梳理每周热门的GitHub项目&#xff0c;这一周的热门项目中AI的比重难得的变低了&#xff0c;终于不像一个AI热门项目汇总了&#xff0c;一起来看看都有哪些项目吧。 #1Maybe 项目名称&#xff1a;Maybe - 个人理财应…

2种数控棋

目录 数控棋1 数控棋2 数控棋1 棋盘&#xff1a; 初始局面&#xff1a; 规则&#xff1a; 规则&#xff1a;双方轮流走棋&#xff0c;可走横格、竖格、可横竖转弯&#xff0c;不可走斜格。每一步均须按棋所在格的数字走步数&#xff0c;不可多不可少。 先无法走棋的一方为…

Java多线程并发篇----第二十五篇

系列文章目录 文章目录 系列文章目录前言一、如何在 Windows 和 Linux 上查找哪个线程使用的CPU 时间最长?二、什么是原子操作?在 Java Concurrency API 中有哪些原子类(atomic classes)?三、Java Concurrency API 中的 Lock 接口(Lockinterface)是什么?对比同步它有什么优…

【机组】算术逻辑单元带进位运算实验的解密与实战

​&#x1f308;个人主页&#xff1a;Sarapines Programmer&#x1f525; 系列专栏&#xff1a;《机组 | 模块单元实验》⏰诗赋清音&#xff1a;云生高巅梦远游&#xff0c; 星光点缀碧海愁。 山川深邃情难晤&#xff0c; 剑气凌云志自修。 ​ 目录 &#x1f33a;一、 实验目…

C语言第三弹---数据类型和变量

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】 数据类型和变量 1、数据类型介绍1.1、整型1.2、浮点型1.3、字符型1.4、布尔类型1.5、各种数据类型的长度1.5.1、sizeof操作符1.5.2、数据类型的长度1.5.3、sizeo…

win系统环境搭建(十二)——Windows系统下使用docker安装redis

windows环境搭建专栏&#x1f517;点击跳转 win系统环境搭建&#xff08;十二&#xff09;——Windows系统下使用docker安装redis 文章目录 win系统环境搭建&#xff08;十二&#xff09;——Windows系统下使用docker安装redis1.创建文件夹2.docker-compose.yaml配置文件3.red…

vulnhub通关-1 DC-1(含靶场资源)

一、环境搭建 1.环境描述 描述 描述&#xff1a; DC-1 is a purposely built vulnerable lab for the purpose of gaining experience in the world of penetration testing. Dc-1是一个专门构建的易受攻击的实验室&#xff0c;目的是获得渗透测试领域的经验。 It was design…

读懂比特币—bitcoin代码分析(一)

最近美国 SEC 通过了比特币的 ETF申请&#xff0c;比特币究竟是个什么东西&#xff0c;从技术上来说&#xff0c;bitcoin 是一个点对点的电子现金系统&#xff0c;它可以实现分布式的记账&#xff0c;不依赖中心化的账务系统&#xff08;比如银行&#xff0c;支付宝&#xff09…