学习嵌入式开发之C语言变量(一)
1 前言
上一篇我们学习了一些学习C语言的基础知识,本篇开始我们就重点来学习C语言的变量。定义变量可以说是编写程序的第一步;把编写程序比喻为盖楼的话,那么定义变量相当于打地基一样。定义一个好的变量结构可以使程序阅读起来通俗易懂,如果灵活地掌握了结构体与指针的运用会使得程序结构清晰简洁且易于移植。

2 位、字节、字等的含义
学习变量之前我们先来了解一下变量的组成,一个变量可能是由多个位、多个字节组成的;那么什么是位、字节、字以及我们生活中常说的手机、内存卡等等的内存*小单大**位Mb以及G的关系呢。(这里我们都是以常规的32位编译环境为例说明)

2.1 位(Bit)
首先我们的程序和数据在计算机的存储中都是以二进制的方式存储的(二进制即指只有0和1),所以实际内部的数据都是0和1组成的,我们称这样一个0或1叫做一个比特(bit),也就是常说的1个位,它只能表示0和1两种情况。
2.2 字节(Byte)
那么如果我们想要表示更多数那该怎么办呢?这时候我们就引出了我们的单位字节(Byte),一个字节由8个位组成,其结构如下表2.1所示。因此可以表示2^8个数(256),例如数值35在计算机中存储就是0010 0011。可能大家看到这里会有点疑问这个值是怎么转换过来的,其实很简单,只需要记住每个Bit位对应的值就好了,比如Bit0为1时它的值等于2^0=1,Bit1为1时它的值等于2^1=2,Bit5为1时它的值等于2^5=32,那么将为1的Bit的值加起来就是它表示的十进制的值了。当然这个方式只适用于整数型的存储格式,对于小数类型的存储计算后续再给大家依依介绍。其通常表示的变量类型有:字符型(char)变量、8位整型变量。
表2.1 字节结构
|
字节 |
1字节(Byte) |
|||||||
|
位 |
Bit7 |
Bit6 |
Bit5 |
Bit4 |
Bit3 |
Bit2 |
Bit1 |
Bit0 |
|
该位对 应得值 |
2^7=128 |
2^6=64 |
2^5=32 |
2^4=16 |
2^3=8 |
2^2=4 |
2^1=2 |
2^0=1 |
2.3 字(Word)
上一节我们介绍到一个字节是由8个位组成的可以表示256个数,那么如果我想表示更多的数那应该怎么办呢?大家可能已经想到答案了,没错就是用更多的位(Bit)来表示。因此一个字(Word)就是由两个字节(Byte)(16个位)组成,其结构如下表2.2所示。它可以表示2^16个数(65536),同样数值的计算方式与字节的计算方式一致,只是多了8个Bit,这里我就不再举例。当然这个方式只适用于整数型的存储格式。其通常表示的变量类型有:短整型变量(short int)
表2.2 字结构
|
字 |
1字(Word) |
|||||||||||||||
|
字节 |
Byte1 |
Byte0 |
||||||||||||||
|
位 |
Bit15 |
Bit14 |
Bit13 |
Bit12 |
Bit11 |
Bit10 |
Bit9 |
Bit8 |
Bit7 |
Bit6 |
Bit5 |
Bit4 |
Bit3 |
Bit2 |
Bit1 |
Bit0 |
2.4 双字(DWord)
同样只能表示65536个数对于我们的日常使用还是不够的,因此继续引出了单位双字,它是由2个字(4个字节或者说是32个位)组成,其结构如下表2.3所示。它可以表示2^32个数(4294967296),同样数值的计算方式与字节的计算方式一致。其通常表示的变量类型有:整型变量(int)、单精度浮点数(float)。当然如果表示得数还不够的话往下还有64位组成的单位,但是对于我们通常的应用32位已经可以满足绝大部分的场合了。
表2.3 双字结构
|
双字 |
1双字(DWord) |
|||
|
字 |
Word1 |
Word0 |
||
|
字节 |
Byte3 |
Byte2 |
Byte1 |
Byte0 |
3 kb、Mb、Gb的关系
我们生活当中买手机通常会问这个手机是多少内存的或者说一个文件是多大的,那么他们的1KB、1Mb、1G和我们上一节介绍的位(Bit)、字节(Byte)有什么关系呢。之前也说了所有的数据都是以二进制0/1的形式存储在计算机当中的,因此一个1文件的大小即表示它是由多少个0和1组成即多少个位多少字节。内存的大小也就是说可以存储多少个0和1。
在计算机中都是以2的多少次幂为单位的,因此1KB并不是1000个字节而是2^10等于1024个字节,即1Kb=1024Byte,同样1Mb与KB之间也是1024倍的关系,而1Gb与Mb之间又是1024的关系。其关系如下:
1Gb=1024Mb=1024*1024Kb=1024*1024*1024Byte=8*1024*1024*1024Bit
比如我们的*载下**一个文件的网速为1MB/S,意思就是1秒钟可以*载下**1024*1024个字节的数据。
再比如我们家里的宽带是100BMS的为什么实际*载下**速度不会超过12.5Mb/s呢,那是因为这里的100BMS的单位指的是Bit因此还需要换算成字节(Byte)需要除以8(1Byte等于8个Bit),100/8=12.5Mb/s了。
4 总结
这一章主要介绍了变量以及数据在计算机上存储的原理和格式以及他们之间的关系,只有了解了他们的存储原理后续学习变量类型时才不会那么的吃力。变量这部分的知识有点多,可能需要好几个章节才能把它讲解清楚,大家感兴趣的话可以关注我,我会不定期的更新文章持续带大家一起学习嵌入式方面的相关知识,有问题的欢迎大家在评论区留言哦!!!