[C语言] 数据存储

news/2024/4/24 4:53:46/

类型意义:

        1.类型决定内存空间大小(大小决定了使用范围)

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

类型分类

        整形

类型大小(字节)
short2
int4
long4
long8

        浮点型

类型大小(字节)
float4
double8
long double12

        构造类型

数组
结构性struct
联合union
枚举enum

         指针类型

         空类型

                void(表示空类型,无返回值)

原码、反码、补码

  •         计算机中的整形有符号数表示方法为 原码,补码,反码.
  •         均为符号位和数值位两部分,符号位都是用0表示"正",用1表示"负",首位为符号位
  •         三种表示方法各不相同
  •         无符号数 : 原码,反码,补码均相同.
  •         计算机存储的是 补码(可以将符号位和数值域统一处理,加法和减法统一处理,因为cpu只有加法器), 反码=补码-1,原码=反码按位取反,特殊的补码 10000000,原码为 -128
  • 无符号类型  unsigned    有符号  signed

原码:

        直接将二进制转按照正负数的形式 换为二进制就可以

反码

        原原码符号位不变,其他位依次按位取反即可

补码

        反码+1即可·

比如 : 

 int a=20;// 4字节 32bit

原码: 00010100(8个数表示20, 前面再加24个0)

补码,反码与 原码相同

int b=-10;//4字节 32bit

原码: 0000  1010(8个数表示10,前面加23个0,最前面符号位为1)

反码: 1111   0101(前面加23个1,最前面符号位为1)

补码: 1111(等于15)   0110(反码+1)

转换16进制位(4个2进制位转换为1个16进制位)   补码转换16进制:0x ffffff6

大小端介绍

什么是大小端:

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

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

低地址:   编号小的   

高地址 :  编号大的

如  0x  11 22 33 44   

地址: 由低到高

数据: 由高到低

        44为数据低位  ,  11为数据高位

        44为内存高地址  ,  11为内存低地址

大端存储:11 22 33 44(人为)

小端存储:44 33 22 11(计算机)

//判断当前字节序:

//思路: 内存以16进制存储,如果第一个字节为 相对应16进制数,就为小端存储 ,否则为大端.
//比如 int a =1;  16进制为 01 00 00 00 (小端)
//利用 char* 来 访问一个字节的内容,指针类型决定访问几个字节的数.

//代码如下:
 

int check()
{
int a=1;
return *(char* )&a;
// 取出a的地址,并把强制转换类型 为 char*(因为只需要访问字节),再解引用得到其中的数,并返回
}int main()
{
//返回1,小端
//返回0,大端int ret=check_sys();
if(ret==1)
{printf("小端");
}
else
{
printf("大端");
}}

例题1:

main()
{//数都为 -1,没赋值前补码都一致char a = -1;//原码:10000000000000000000000000000001//补码:11111111111111111111111111111111//输出为int.整形提升(按符号位补高位)//得补码:11111111111111111111111111111111(32)//为负数,原码输出还是 -1signed b = -1;//和a同理unsigned c = -1;//补码:111111111111111111111111 11111111//因为赋值类型为unsigned ,最高位为0,整形提升(按符号位补高位),//得新补码:0000000000000000000000 11111111(32)//此时为整数, 原反补码一致 为255printf("%d %d %d", a, b, c);}

例题2:

main(){//数都为 -1,没赋值前补码都一致char a = -128;//原码:100000000000000000000000 10000000//补码:111111111111111111111111 10000000//因为赋值类型为char.认为1为符号位(按符号位补高位)//得新补码:111111111111111111111111 10000000(32)//%u打印 打印十进制无符号数., 原反补码一致 为111111111111111111111111 10000000printf("%u", a);}

char 分析: 

有符号 char范围 : -128------127

无符号 char范围:   0-------255

有符号字符类型范围图:

例题3: 

main(){char a = 128;printf("%u", a);char b =- 128;printf("%u", b);
//输出一致
// a存不了128, 可以表示为 127+1=-128}

 例题4:(无符号 与 有符号 计算)

    

int i=-20;
unsigned j=10;
printf("%d",i+j);//-20的 补码
11111111 11111111 11111111 11101100 //10的 补码
000000 0000000 0000000 00001010结果:
11111111 1111111 11111111 11111010 补码
11111111 1111111 11111111 11110110 反码
00000000 0000000 00000000 00001001 原码  -10 

    例题5: (-1 补码 与  无符号数)

unsigned int i;
for(i=9;i>=0;i--)
{printf("%d",i)
}//无限循环//当循环到 -1 时,由于-1补码全为1, 赋值给i, i为 无符号数,修改最前面的1为0 ,将会变为一个超大的数.

例题6: (字符类型范围)

char a[1000];
int i;
for(i=0;i<1000;i++)
{a[i] = -1 - i;}
printf("%d", strlen(a));//参考上图 字符类型取值范围图,  
//当-1,-2.....到-128是,下一个数 为127,126,125.....,知道0,停止存储.
//字符类型范围 -128到127

例题7:

	unsigned char a[1000];int i;for(i=0;i<=255;i++){printf("hello");}//无符号数 取值范围 0-255 , 当i为255+1 时, 将会变为 0,从而无限循环

浮点 类型:

基础知识:

不带任何后缀的浮点型变量 默认double , 以f(F).l(L) 分别表示 float 和 long double 

float 表示 6个有效字符 , double 表示 15个 , long double 表示 18个.

浮点型 字面量,有且只有一个小数点,两侧至少一边有数字.

指数形式:

e(E)为底 为  十进制指数 如:2.87e-3  ,

以0x(0X)打头,p(P)分隔的 是以 2为底数的 16进制指数  如:0x2p3=16.0


http://www.ppmy.cn/news/1381121.html

相关文章

安卓Java面试题 81- 90

81. 简述Android数字签名?Android系统要求所有的应用必须被证书进行数字签名之后才能进行安装。Android系统通过该证书来确认应用的作者,该证书是不需要权威机构认证的,一般情况下应用都是用开发者的自签名证书,该证书是确保应用程序和应用程序作者之间建立信任关系,而不是…

chrome高内存占用问题

chrome号称内存杀手不是盖的&#xff0c;不设设置的话&#xff0c;经常被它内存耗尽死机是常事。以下自用方法 1 自带的memory saver chrome://settings/performance PerformanceMemory Saver When on, Chromium frees up memory from inactive tabs. This gives active tab…

无人机远程指挥控制系统技术,无人机远程指挥中心功能详解

无人机远程指挥控制系统是一种用于实现无人机远程控制和指挥的技术。它主要基于先进的通信技术和无人机控制技术&#xff0c;使得操作人员可以在远离无人机的地方对其进行实时的控制和监控。 无人机远程指挥控制系统关键部分&#xff1a; 1. 通信技术&#xff1a;这是无人机远…

ASR语音识别纠错-fast correct

1、使用方式说明 ASR对应的文本越长&#xff0c;识别准确率和召回率越高 识别的错误分类&#xff1a; 编号错误类型示例1谐音字词配副眼睛-配副眼镜2混淆音字词流浪织女-牛郎织女3多字错误关关机-关机4少字错误 爱有天意-假如爱有天意 5形似字错误高梁-高粱6中文拼音全拼xin…

【开发方案】Android 双卡设备手动搜网功能适配

一、背景 存在运营商需求:当SIM卡设置中选择了自动搜网,那么在重启开机后要执行一次手动搜网。 若基于本身单卡的实现,只搜索卡槽0的,而且写成了单线程,那么就在适配双卡的过程中还需要调整设计模式。 二、源码逻辑 Settings应用发送消息,Telephony 模块Handler回调方…

【深度学习笔记】7_7 AdaDelta算法

注&#xff1a;本文为《动手学深度学习》开源内容&#xff0c;部分标注了个人理解&#xff0c;仅为个人学习记录&#xff0c;无抄袭搬运意图 7.7 AdaDelta算法 除了RMSProp算法以外&#xff0c;另一个常用优化算法AdaDelta算法也针对AdaGrad算法在迭代后期可能较难找到有用解的…

win10 蓝牙耳机连接异常重置

安装修复工具 BluetoothCLTools-1.2.0.56 一直下一步 安装完成后管理员进入powershell 执行 btpair.exe -u此命令是卸载蓝牙设备 然后在蓝牙面板和设备管理中查找蓝牙设备是否还在 重新再识别连接蓝牙即可

软件应用实例分享,茶楼计时收费管理系统软件,佳易王茶社吧台计时收费软件试用版教程

软件应用实例分享&#xff0c;茶楼计时收费管理系统软件&#xff0c;佳易王茶社吧台计时收费软件试用版教程 一、前言 以下软件操作教程以 佳易王茶室计时计费软件V17.9为例说明 软件文件下载可以点击最下方官网卡片——软件下载——试用版软件下载 【茶楼计时计费软件&…

【Java EE】线程安全的集合类

目录 &#x1f334;多线程环境使用 ArrayList&#x1f38d;多线程环境使⽤队列&#x1f340;多线程环境使⽤哈希表&#x1f338; Hashtable&#x1f338;ConcurrentHashMap ⭕相关面试题&#x1f525;其他常⻅问题 原来的集合类, 大部分都不是线程安全的. Vector, Stack, HashT…

Doris部署学习(一)

目录 前言 一、Docker容器支持 二、Doris编译步骤 1.拉取镜像 2.构建Docker编译容器 3.下载源码并编译 前言 本文档主要介绍如何通过源码在Docker编译 Doris&#xff0c;以及部署。 一、Docker容器支持 Docker教程&#xff1a;Docker & Docker-Compose 安装教程 - 知…

java Lambda表达式如何支持实例方法引用

java Lambda表达式如何支持实例方法引用 在Java中&#xff0c;Lambda表达式确实支持实例方法引用。实例方法引用允许你引用一个对象实例的某个方法&#xff0c;并将其作为Lambda表达式的实现。这提供了一种简洁的方式来表示Lambda表达式&#xff0c;特别是当Lambda表达式仅仅是…

MyBatis拦截器四种类型和自定义拦截器的使用流程

文章目录 MyBatis拦截器四种类型和自定义拦截器的使用流程一、MyBatis拦截器四种类型的详细解释&#xff1a;1. **ParameterHandler 拦截器**&#xff1a;2. **ResultSetHandler 拦截器**&#xff1a;3. **StatementHandler 拦截器**&#xff1a;4. **Interceptor Chain 拦截器…

【Python爬虫神器揭秘】手把手教你安装配置Scrapy,高效抓取网络数据

1、 引言 在大数据时代&#xff0c;网络上的信息犹如海洋般浩瀚。想要在这片海洋里挖掘宝藏&#xff0c;一款强大的工具必不可少。今天我们要带大家深入探索的就是Python界鼎鼎大名的爬虫框架——Scrapy。无论你是数据分析师、研究员还是开发者&#xff0c;学会利用Scrapy来自…

ARM学习(25)链接装载高阶认识

ARM学习&#xff08;25&#xff09;链接装载高阶认识 1、例子引出 笔者先引入几个编译链接的例子来介绍一下&#xff1a; 声明无效&#xff1a;declared implicitly&#xff1f;&#xff0c;属于编译错误还是链接错误&#xff1f; 编译阶段的错误&#xff0c;属于编译错误&am…

RocketMQ - 如何对生产环境的RocketMQ集群进行消息轨迹的追踪?

如果我们的业务系统中使用到了RocketMQ来进行消息处理&#xff0c;在生产环境中可能就会遇到消息数据的丢失&#xff0c;某个应该被正常处理的消息&#xff0c;业务系统并没有接收到&#xff0c;导致生产环境出现问题。要排查类似这种线上问题&#xff0c;我们就需要了解这个消…

【数据结构】顺序表的定义及实现方式

文章目录 顺序表的定义顺序表的实现静态分配动态分配动态申请内存空间&#xff0c;动态释放内存空间&#xff08;malloc&#xff0c;free&#xff09; 顺序表的特点总结 顺序表的定义 顺序表也就是用顺序存储的方式实现线性表。 顺序存储。把逻辑上相邻的元素存储在物理位置上…

第8集《天台教观纲宗》

五、法华涅槃时 请大家打开讲义第十三页。我们讲到五时里面的第五个时段&#xff0c;法华涅槃时。 在《法华经》上说&#xff0c;十方诸佛&#xff0c;包括过去的诸佛&#xff0c;包括现在诸佛&#xff0c;乃至于包括未来即将出世的诸佛&#xff0c;他的出世只有一个目的&…

JVM垃圾收集器之CMS垃圾收集器和G1垃圾收集器

CMS垃圾收集器 CMS垃圾收集器 CMS GC的英文名为&#xff1a;“Mostly Concurrent Mark and Sweep Garbage Collector” &#xff08;最大-并发-标记-清除-垃圾收集器&#xff09;。 作用范围&#xff1a; 老年代 算法&#xff1a; 并发标记清除算法。 启用参数&#xff1a;-XX…

堆的建立与排序

#include "Heap.h" void HeapSort() { int i 0; int arr[] { 1,9,8,6,2,3,4,5,7,88,66,99,77 }; int sz sizeof(arr)/sizeof(arr[0]); BuildHeap_max( arr,sz);//建立大堆&#xff0c;采用向下调整 for( ; sz ! 1 ; sz--) { swa…

C#编程技巧--2

1.使用泛型: 泛型允许你编写更加灵活和可重用的代码&#xff0c;同时提高类型安全性。 C# 中的泛型功能允许你编写更加灵活和可重用的代码&#xff0c;并且可以增加类型安全性。通过使用泛型&#xff0c;你可以编写适用于不同类型的代码&#xff0c;而无需为每种类型单独重写代…