C进阶-数据的存储

devtools/2024/9/22 20:20:48/

文章目录

  • 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 标准是未定义的,取决于编译器的实现.charunsigned charsigned charshortunsigned short [int]signed short [int]int//int a; <---> signed int a;unsigned intsigned intlongunsigned long [int]signed long [int]long long1unsigned long long [int]signed long long [int]
浮点型家族:只要表示小数就可以使用浮点型
float 的精度低,存储的数值范围比较小,
double 的精度高,存储的数组范围比较大
构造类型: 自定义类型-可以自己创建出新的类型数组类型结构体类型 struct枚举类型 enum联合类型 union
指针类型:int *pi;char* pc;float* pf;void* pv;
空类型: voidvoid 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 -- 原码//-1unsigned char c = -1;		//整数-1,截断后存unsigned char//11111111//%d打印整型//整型提升,数据类型为无符号整型,补0//00000000 00000000 00000000 11111111 -- 整数//255printf("%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~255unsigned short: 	-32768~0~32767signed 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.ppmy.cn/devtools/25596.html

相关文章

解析企业绩效通系统架构:构建高效管理与激励平台

在当今竞争激烈的商业环境中&#xff0c;企业需要不断提升管理效率和员工激励力度&#xff0c;以保持竞争优势并实现可持续发展。绩效通系统作为一种集成了绩效管理、激励机制和员工发展规划的管理工具&#xff0c;正逐渐成为现代企业管理的核心组成部分。本文将深入探讨企业绩…

RabbitMQ中的交换机类型

交换机类型 可以看到&#xff0c;在订阅模型中&#xff0c;多了一个exchange角色&#xff0c;而且过程略有变化&#xff1a; Publisher&#xff1a;生产者&#xff0c;不再发送消息到队列中&#xff0c;而是发给交换机 Exchange&#xff1a;交换机&#xff0c;一方面&#xff…

UE5 GAS开发P41-43 永久效果,去除永久效果,伤害区域,EnumClass,开始重叠与结束重叠事件

这一部分学习了怎么创建一个伤害性的地形(火焰地形,毒沼泽等都可以用这个方式创建) AuraEffectActor.h // Fill out your copyright notice in the Description page of Project Settings.#pragma once#include "CoreMinimal.h" #include "GameplayEffect.h&q…

uniapp小程序订阅通知

服务 开通订阅服务 const tmplIds ref([tsdasdadasdfgdrtwexQHdEsjZV])//换成自己的 function confirm(){uni.requestSubscribeMessage({tmplIds: tmplIds.value,success: (res) > {// console.log(res)let auth_notice res[tmplIds.value[0]] accept ? 1 : 2 //1是接…

C#基础之冒泡排序

排序初探 文章目录 冒泡排序1、概念2、冒泡排序的基本原理3、代码实现思考1 随机数冒泡排序思考2 函数实现排序 冒泡排序 1、概念 将一组无序的记录序列调整为有序的记录序列&#xff08;升、降序&#xff09; 2、冒泡排序的基本原理 两两相邻&#xff0c;不停比较&#x…

富格林:可信方略杜绝交易虚假

富格林指出&#xff0c;黄金市场是一个极具诱惑力的市场&#xff0c;它是在一个大家共同认可的游戏规则下&#xff0c;凭借自己可信的决策、判断来进行交易的一种投资市场。黄金市场不断有新手投资者的加入&#xff0c;但是要真正在该市场上获利&#xff0c;杜绝虚假套路是一个…

【即插即用】SGE注意力机制(附源码)

原文链接&#xff1a; https://arxiv.org/abs/1905.09646 源码链接&#xff1a; https://github.com/implus/PytorchInsight 摘要简介&#xff1a; 在图像识别领域&#xff0c;卷积神经网络&#xff08;CNN&#xff09;通过收集和整合复杂对象的层次化和不同部分的语义子特…

bitbake ERROR:No space left on device or exceeds fs.inotify.max_user_watches?

使用vscode remote ssh来编辑服务器上源码后&#xff0c;执行bitbake编译时&#xff0c;遇到了如下报错&#xff1a;ERROR:No space left on device or exceeds fs.inotify.max_user_watches? 可能的解决方法和原因&#xff1a; 首先可以尝试关闭vscode&#xff0c;然后在服务…