关键字_数据类型_5

关键字_数据类型_5

为什么会提出数据类行这个概念?
C语的操作对象是什么:资源/内存(内存类型的资源,LCD缓存、LED灯),数据类型是为了限制资源的范围。
C语言如何描述这些资源的属性?
通过数据类型来描述资源大小的属性。数据类型:资源属性的大小【限制数据大小的一组特殊意义的字符串】,由编译器来定义数据类型的大小,不同的编译器中数据类型的大小是不一样的,所以涉及到数据类型大小的时候,不能回答定值,最终是由编译器来决定的。
1、char
2、int
3、long、short
4、unsigned、signed
5、float、double
6、void
1、char:数据类型产生的第一个类型。
从硬件嵌入式的角度来讲,我们最终是操作硬件芯片,硬件芯片操作的最小的单位是bit,软件中称之为位,只有0和1两种高低位。
软件操作的最小单位
如果软件中直接定义了bit a,而不是char a,那么软件就可以直接来控制硬件了,这样子做软件开发的成本量会非常的大,所以我们把一组这样子的bit,当成软件操作的最小单位
8bit(位) = 1b(字节)bit(位)一般代表的是硬件的规范,而b(字节)一般代表软件的规范。
比如我们一般上网,家里的网速是4M,但是其实下载速度都是多少kb,原因是这里的4M是以已经的bit作为计量单位的,而不是软件的以软件的b作为计量单位。
4M 4Mbit XXXkb
char所描述的是硬件操作的所能在软件中所能描述的最小单位。
应用场景:
硬件的处理的最小单位
char but[xx] in butt[xx] 对方发送了123字符用int接收了就多了,应该用char来接收。
ASCII 8bit描述每一个键盘的键值,所以就有了ASCII,描述的所有的都能描述出来。
2、int:因为char这边所代表的数值的非常的小,8bit == 256,char a = 300的话会发生溢出,这里建立溢出问题的意识,为了解决溢出的问题,定义了个int。
编译器有一个最优秀的处理大小,cpu在运行的时候并不是一次读8个bit,按照cpu数据总线的最大容量进行处理,这时候编译器也有一个最优的处理,系统的一个周期,所能接受的最大处理单位,这个单位被称为int,cpu一次处理的最大单位是32位给一个char没有多大的意义32 bit = 4B (32位的系统)16位的系统比如单片机这种,16bit = 2B int,所以一个int有可能是4个字节,也有可能是2个字节,所以int大小都是根据编译器来决定的。
Int 和char的使用
如果说a只是描述一些数字的处理,那用int肯定比char合理,因为首先来说容量大,另外可以达到系统最优秀的处理方法,而char更多的时候是面向硬件的,比如循环,计数器用char比用int更加合理,arm汇编语言中会体现的更加的面明显。
整型常量
char a = 300,c语言编译器非常单纯,从头到尾去处理,当看到char后面跟了一个a之后,他会把a当成char类型的一个变量名,开发8个bit为a去服务,300这样子的数字够成的字符串称之为常量,那个常量我们要怎么理解,这个我们称之为整形常量, 整形就是int类型。
举例子:以16位的cpu为例子
16位的CPU所能描述的最大的常量为2^16 = 65536,如果我们定义一个变量int a = 66536,那么编译不出出错,运行结果会出现奇怪的结果,所以我们这边会在定义时候写成int a = 66535L或66535l来表示无论这个常量的大小,编译器为这个常量所分配的都是4个字节的存储大小(这里指的是16位的cpu),如果是32位的就是8个字节。
常量一般我们描述的时候默认使用十进制来描述的,实际开发中也会用到进制描述,用数学很好理解,但是要转换成计算机中的二进制高低电频就很难理解,这个时候我们就需要理解进制。
十进制(0-9):人和人最好交流的数学理解
八进制(0-7):二进制的衍生,在软件中直接定义0和1,3个最小的bit恰好就是我们的八进制
111 0x7
1000 0x8
十六进制
二进制
3、long、short
3个bit可以表示8进制,4个bit可以表示16进制,如果int a = 010这里0写不写无所谓,我们这边就会认为这里的0代表的是8进制,那010代表的就是8,这里是8进制的常量,int a = 0x10 0x就是代表16进制,10就代表16进制的常量,换算成10进制就是16,long和short就是补充int和char的短板。
short长度一定是16bit不能超,超过就是错误的,long是C语言可扩展的类型,long long可以表示64,没有完全理解。
3、unsigned、signed
无符号:数据(摄像头采集的或者是显卡采集的)
有符号:数字(可用于加减乘除)
如果我们在int,char前面没有家符号数,默认是有符号数signed,如果是无符号数,我们必须在前面定义unsigned,这两个关键词的意义,有符号数和五符号数最大的区别就是这段内存的最高字节,我们究竟是把他当成符号位还是数据位
内存空间的最高字节是符号位,还是数据。
int a
char a
嵌入式的位运算

:右移操作
Char = -1;0xff
a>>1:有符号数永远无法移到0,因为他是按照占位来的
unsigned char b = -1,
b>>1:无符号数是可以移动到1的,因为他的最高为是符号位
浮点运算

5、float、double
Float:代表4个字节
Double:代表8个字节
浮点型常量:占用的是8个字节的,默认是我们的double
因为float占用的字节空间真的是很大,所以我们还是能不用数就不用小树
Doble如果说我们的精度没有必要达到这么的深,我们可以写成”1.0f”,告诉我们编译器,我们没有必要达到double精度那么深的,我们只需要4个字节,实际开发中整形用到的比较多,浮点型会很少。
6、void
Viod 不能称之为限制内存大小的关键字。
Void a其实是没有什么意义的,因为并没有告诉所用分配内存空间的大小的,这种时候更多的是占位标志,只是告诉我们申请一个变量名,具体变量是什么到时候由viod进行强制类型转换等等操作,void更多的时候是一个声明标志,而不是一个使用标志。
a++这种是错误的,void更多的时候是一种语义
viod fun(),表示函数没有返回值
总的来说数据类型就是c语言编译器为我们提供了一套内存限制的符号,根据我们自己的需求,我们来圈定我们的那一块地,重点掌握这个大小范围就行。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值