C进阶-数据的存储

文章目录

  • 1. 数据类型介绍
    • 类型的基本归类
  • 2. 整型在内存中的存储:原码,反码,补码
      • 2.1. 原码,反码,补码
    • 2.2. 大小端介绍
      • 大端字节序存储
      • 小端字节序存储
      • 例:设计程序判断是大端还是小端?
    • 2.3. 练习
      • 练习1
      • 练习2
      • 练习3
      • 练习4
  • 3. 浮点型在内存中的存储

1. 数据类型介绍

数据类型数据类型字节
char字符数据类型1
short短整型2
int整型4
long长整型4/8
long long更长的整型8
float单精度浮点数4
double双精度浮点数8
  • 类型的意义:
    1.使用这个类型开辟空间的大小.(大小决定了适用范围).
    2.如何看待内存空间的视角.

类型的基本归类

整型家族:
	//字符的本质是ASCII码值,是整型,所以划分到整型家族.
	//char到底是signed char 还是unsigned char 标准是未定义的,取决于编译器的实现.
	char
		unsigned char
		signed char
	short
		unsigned short [int]
		signed short [int]
	int
		//int a; <---> signed int a;
		unsigned int
		signed int
	long
		unsigned long [int]
		signed long [int]
	long long1
		unsigned long long [int]
		signed long long [int]

浮点型家族:只要表示小数就可以使用浮点型
float 的精度低,存储的数值范围比较小,
double 的精度高,存储的数组范围比较大
构造类型: 自定义类型-可以自己创建出新的类型
	数组类型
	结构体类型 struct
	枚举类型 enum
	联合类型 union
指针类型:
	int *pi;
	char* pc;
	float* pf;
	void* pv;
空类型: 
	void
	                         
	void test(void);
	//第一个void 表示函数不会返回值
	//第二个void 表示函数不需要传任何参数

2. 整型在内存中的存储:原码,反码,补码

  • 数值的表示
    • 2进制 0b10101
    • 8进制 025
    • 10进制 21
    • 16进制 0x15

2.1. 原码,反码,补码

  • 整数的2进制也有3种表示形式:

    • 符号位+数值位,符号位为0表示"正", 为1表示"负".
    • 1.正的整数,原码,反码,补码相同
    • 2.负的整数,原码,反码,补码需要计算.
    • 原码: 直接通过正负的形式写出二进制序列就是原码
    • 反码: 原码的符号位不变,其他位按位取反
    • 补码: 反码+1
  • 整数内存中存补码的2进制

    • 为什么?
    • 使用补码,可以将符号位和数值域统一处理
    • 同时,加法和减法也可以统一处理(CPU只有加法器).
    • 补码与原码相互转换,其运算过程是相同的,不需要额外的硬件电路.
    int a = 20;
    //20
    //00000000 00000000 00000000 00010100
    //0x 00 00 00 14
    //原码,反码,补码相同
    
    //int b = -10;
    //-10
    //10000000 00000000 00000000 00001010 -- 原码
    //11111111 11111111 11111111 11110101 -- 反码
    //11111111 11111111 11111111 11110110 -- 补码
    //0x ff ff ff f6
    

在内存窗口查看20,-10的地址中存储的数据
在这里插入图片描述

2.2. 大小端介绍

大端字节序存储

  • 把一个数据的高位字节序的内容存放在低地址处,
    把低字节序的内容存放在高地址处,就是大端字节序存储.

小端字节序存储

  • 把一个数据的高位字节序的内容存放在高地址处,
    把低字节序的内容存放在低地址处,就是小端字节序存储.

例:设计程序判断是大端还是小端?

```
	//*(char*)&a --> int*
	//check_sys();
	int check_sys()
	{
		int a = 1;
		return *(char*)&a;
	}

	int main()
	{
		int ret = check_sys();
		if (ret)
		{
		printf("小端\n");
		}
		else
		{
			printf("大端\n");
		}
		return 0;
	}

```

2.3. 练习

练习1

	char a = -1;	
	signed char b = -1;		
	//-1是整数
	//10000000 00000000 00000000 00000001 -- 原码
	//11111111 11111111 11111111 11111110 -- 反码
	//11111111 11111111 11111111 11111111 -- 补码
	//存到char,截断,取低地址的后8位
	//11111111
	//%d --打印有符号的整型
	//整型提升,char有符号,补符号位1
	//11111111 11111111 11111111 11111111 -- 补码
	//10000000 00000000 00000000 00000000 -- 反码
	//10000000 00000000 00000000 00000001 -- 原码
	//-1
	
	unsigned char c = -1;		
	//整数-1,截断后存unsigned char
	//11111111
	//%d打印整型
	//整型提升,数据类型为无符号整型,补0
	//00000000 00000000 00000000 11111111 -- 整数
	//255
	
	printf("%d %d %d\n",a,b,c);//-1 -1 255
	```
	
	
	
	```
	signed char :	-128~127
	补码:0~2^7,-1~-2^7
	原码:0~127,-128~-1	
	unsigned char:	0~255

	unsigned short: 	-32768~0~32767
	signed short:	0~65535
	

练习2

	char a = -128;
	printf("%u\n", a); 		//4,294,967,168
	//-128整数
	//10000000 00000000 00000000 10000000
	//11111111 11111111 11111111 01111111
	//11111111 11111111 11111111 10000000
	//放char
	//截断
	//10000000
	//整型提升
	//11111111 11111111 11111111 10000000
	//%u 打印无符号整数
	//4,294,967,168
	

练习3

	char a = 128;
	printf("%u\n", a);
	
	//128整数
	//00000000 00000000 00000000 10000000
	//截断
	//10000000
	//整型提升--看a的类型
	//11111111 11111111 11111111 10000000 
	//%u 打印无符号整数
	//4,294,967,168

练习4

		int i = -20;
		unsigned int j = 10;
		printf("%d\n",i+j);//-10
		//-20
		//10000000 00000000 00000000 00010100
		//11111111 11111111 11111111 11101011
		//11111111 11111111 11111111 11101100
		
		//10
		//00000000 00000000 00000000 00001010
		//
		
		//-20+10
		//11111111 11111111 11111111 11101100   -- -20
		//00000000 00000000 00000000 00001010	-- 10
		//11111111 11111111 11111111 11110110	-- 补码
		//10000000 00000000 00000000 00001001
		//10000000 00000000 00000000 00001010   -- -10
	

3. 浮点型在内存中的存储

  • 浮点数家族:flloat, double, long double类型.
  • 浮点数存储规则:
    • 国际标准IEEE754:,任意一个二进制浮点数V可以表示成下面的形式:
(-1)^S * M * 2^E

(-1)^S表示符号位,当S=0,V为正数;当S=1,V为负数。

M表示有效数字,大于等于1,小于2。

2^E表示指数位。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

YARN详解

YARN 简介 YARN 是Yet Another Resource Negotiator的缩写。 YARN是第二代MapReduce,即MRv2,是在第一代MapReduce基础上演变而来的,主要是为了解决原始Hadoop扩展性较差,不支持多计算框架而提出的;通俗讲就是资源管理器. YARN核心思想: 将 MR1 中资源管理和作业调度两个功能分…

node.js 解析post请求 方法二

前提&#xff1a;以前面发的node.js解析post请求方法一为模板&#xff0c;具体见 http://t.csdnimg.cn/ABaIn 此文我们运用第二种方法&#xff1a;使用第三方模块formidable对post请求进行解析。 1》代码难点 *** 在Node.js中使用formidable模块来解析POST请求主要涉及到处理…

读(用知云翻译)gaitedge论文

文章目录 前言摘要一、介绍二、相关工作2.1步态识别2.2端到端学习 三、跨域问题四、我们的框架4.1步法合成4.2步态对准模块 五、实验5.1设置5.2性能比较5.3消融实验5.4可视化 六、结论 前言 本篇博客仅为个人学习&#xff0c;全文均为知云翻译&#xff0c;如有翻译不当&#x…

Android中的屏幕刷新机制(动画视频形象说明机制)

一&#xff0c;刷新率和帧率&#xff0c;60hz和60fps的区别 在Android系统中&#xff0c;刷新率和帧率是两个不同的概念&#xff0c;它们各自在显示过程中扮演着不同的角色。以下是对它们的详细解释&#xff1a; 刷新率&#xff0c;单位是Hz&#xff0c;是指屏幕在一秒内刷新…

Python来计算 1,2,3,4 能组成多少个不相同且不重复的三位数?

我们今天的例子是 有 1&#xff0c;2&#xff0c;3&#xff0c;4 四个数字&#xff0c;它们能组成多省个互不相同且无重复的三位数&#xff1f;都分别是多少&#xff1f; 话不多说&#xff0c;我们先上代码 num 0 # 我们写了三个for循环&#xff0c;表示生成的三位数 for i…

ROS 2边学边练(41)-- 使用基于tf2_ros::MessageFilter带标记(位姿、时间...)的数据类型

前言 此篇将介绍如何利用tf2来使用传感器数据&#xff08;如单声道和立体声摄像机以及雷达&#xff09;。 假设我们创建了一只海龟叫turtle3&#xff0c;它的里程计不大好用&#xff0c;为了监视turtle3的活动轨迹&#xff0c;有台头顶摄像机被安装到该海龟的背上&#xff08;负…

arp欺骗详解

目录 arp攻击原理 arp协议简介 arp攻击原理 arp实验 实验环境 实验步骤 1、使用ipconfig命令查看靶机&#xff08;window10&#xff09;的IP地址为下一步攻击做好准备&#xff0c;这一步是模拟你获取对方IP的过程 2、使用ifconfig查询查看攻击者&#xff08;kali&#x…

【华为 ICT HCIA eNSP 习题汇总】——题目集19

1、&#xff08;多选&#xff09;以下选项中&#xff0c;FTP 常用文件传输类型有&#xff08;&#xff09;。 A、ASCII 码类型 B、二进制类型 C、EBCDIC 类型 D、本地类型 考点&#xff1a;应用层 解析&#xff1a;&#xff08;AB&#xff09; 文件传输协议&#xff08;FTP&…

Win10无法合并分区?尝试以下2种解决方法吧

若Win10无法合并分区&#xff0c;导致C盘无法扩容&#xff0c;该如何解决呢&#xff1f;本文将介绍如何利用磁盘管理工具和傲梅分区助手轻松解决这个问题&#xff01; 为什么要合并硬盘分区&#xff1f; 合并硬盘分区是指将同一硬盘上的两个分区合并成一个&#xff0c;或者将…

K8S controller编写之Informer的原理+使用[drift]

概念 核心思想&#xff08;重点&#xff09;watch-list 机制 Watch 通过 HTTP 协议与 Kubernetes API Server 建立长连接&#xff0c;接收 Kubernetes API Server 发来的资源变更事件。Watch 操作的实现机制使用 HTTP 协议的分块传输编码——当 client-go 调用 Kubernetes API…

物联网D1——建工程,配环境,注意事项

1.STLink、JLink、USB等驱动配置keil环境配置——下载芯片对应型号的包——导入库函数源文件、Core内核文件、对应芯片系统文件。 2.学会看芯片手册 3.在STM32微控制器中&#xff0c;CRH通常指的是控制寄存器高位&#xff08;Control Register High&#xff09;。 在这种情况下…

OMG 一个方法的调用改动居然优化了一倍性能!!! ConcurrentHashMap.computeIfAbsent 学习

背景 前提&#xff1a;抖音小程序有qps的监控&#xff0c;如果说qps过低就会导致小程序被下架掉。 业务代码非常的简单 一个easy的查询 但是当并非达到 20就 会发现qps降低了10倍 业务需求实现大概这么一个链路 ok 那么此前我们在认识一下 computeIfAbsent 方法&#xff08;大…

Windows使用SSH登录本机Linux虚拟机

SSH&#xff08;Secure Shell&#xff09;&#xff0c;一种网络协议&#xff0c;可以在安全外壳下实现数据传输通信&#xff0c;所以主要用于计算机间加密登录&#xff0c;可以简单理解为远程控制。除了计算机间直接互联&#xff0c;在git中也可以看到&#xff0c;常见的协议有…

opencv基础篇 ——(十一)常用照片处理函数

改善图像的亮度(illuminationChange) 用于改善光照条件不佳导致的图像对比度低下或局部过暗/过亮的问题。该函数通过模拟全局和局部光照变化&#xff0c;旨在提高图像的整体视觉质量&#xff0c;特别是在低光照条件下&#xff0c;使得图像中的重要细节更加清晰可见。 函数原型…

基于python的舞蹈经验分享交流网站django+vue

1.运行环境&#xff1a;python3.7/python3.8。 2.IDE环境&#xff1a;pycharmmysql5.7/8.0; 3.数据库工具&#xff1a;Navicat11 4.硬件环境&#xff1a;windows11/10 8G内存以上 5.数据库&#xff1a;MySql 5.7/8.0版本&#xff1b; 运行成功后&#xff0c;在浏览器中输入&am…

什么牌子内衣洗衣机好用?五种高性价比单品一览

随着科技的进步和消费者对生活质量的要求越来越高&#xff0c;很多小家电被发明出来&#xff0c;其中讨论热度较高是内衣洗衣机。它不仅方便快捷&#xff0c;还能保持衣物清洁和卫生。不过现在市面上的内衣洗衣机品牌实在太多了&#xff0c;在选购的时候让人很犹豫&#xff0c;…

日本一站式软文发稿:开启你的日本市场之旅

在当今的业界里&#xff0c;软文发稿已经成为一种被广泛采用的营销策略。不同于硬广告的直接推销&#xff0c;软文发稿注重以讲故事&#xff0c;提供有价值的信息&#xff0c;借此影响和吸引读者&#xff0c;从而间接推广企业的产品和服务。 相对于其它地区&#xff0c;日本市…

单片机排队叫号系统Proteus仿真程序 有取号键和叫号键以及重复叫号键 有注释

目录 1、前言 ​ 2、程序 资料下载地址&#xff1a;单片机排队叫号系统Proteus仿真程序 有取号键和叫号键以及重复叫号键 有注释 1、前言 系统组成&#xff1a;STC89C52RCLcd1602蜂鸣器按键 具体介绍&#xff1a; Lcd1602排队叫号系统&#xff0c;有取号显示窗和叫号显示窗…

解决clickhouse 启动报错

解决clickhouse 启动报错 Error response from daemon: driver failed programming external connectivity on endpoint clickhouse-server (b42457434cebe7d8ad024d31e4fd28eae2139bb2b5046c283bea17ce4398d5b0): Error starting userland proxy: listen tcp4 0.0.0.0:8123: …

MySQL中怎么存放一条记录

2.2.1. MySQL中一行记录是怎么存储的&#xff1f; MySQL的数据存储在那个文件&#xff1f; 每创建一个 database&#xff08;数据库&#xff09;都会在 /var/lib/mysql/ 目录里面创建一个以 database 为名的目录&#xff0c;然后保存表结构和表数据的文件都会存放在这个目录里…
最新文章