hi!大家好,今天是学习嵌入式的第二天。希望可以和大家一起互相交流学习嵌入式。今天开始进行C语言部分的学习。今日学习内容为基本数据类型。
摘要:【嵌入式学习笔记:C语言基础数据类型】本文介绍了嵌入式开发中C语言基础数据类型的学习内容:1. 计算机组成原理:CPU、内存与外存的交互关系;2. 数据单位换算:bit、byte到TB的进制转换;3. 基本数据类型分类:包括整数型(有/无符号)、浮点型(float/double)、字符型(char)、布尔型(bool)和void类型;4. 变量与常量定义规则:命名规范、存储特性及各类常量表示方法。重点讲解了补码存储原理、ASCII编码、浮点数精度等核心概念,为嵌入式开发奠定C语言基础。
一、C语言学习计划
1.基本数据类型、运算符、表达式。
2.输入输出函数。
3.流程控制。
4.数组。
5.函数。
6.指针。
二、基础知识
1.C语言代码运行的原理(了解即可):
首先计算机包含五大组成部分。运算器、控制器、储存器、输入设备、输出设备。
运算器目前统称CPU,与CPU进行交互的是内存(造价高、读写速度快、掉电数据丢是)。还有一个外存(造价便宜、读写速度慢、掉电数据不丢失)不能与CPU进行信息交互。
所以我们写好的二进制代码写好时先存在外存当中,电脑编译运行时加载至内存中。内存会将指令和数据加载到CPU中执行代码。
2.计算机中各数据的单位:
bit(位) | 代码中0/1占一位 |
byte(字节) | 1byte == 8bits |
kb | 1kb == 1024 bytes |
mb | 1mb == 1024kb |
gb | 1gb == 1024mb |
tb | 1tb == 1024gb |
3.进制转换:
二进制:0 1
八进制:0 1 2 3 4 5 6 7
十进制:0 1 2 3 4 5 6 7 8 9
十六进制: 0 1 2 3 4 5 6 7 8 9 a b c d e f
①二进制、八进制、十六进制——→十进制: 对应位 * 对应位的权值再求和
eg:0x123(十六进制)
十进制结果=3*16^0+2*16^1+1*16^2
=291
其他情况类似
②十进制——→二进制、八进制、十六进制:十进制数除以进制数得到的余数逆序排列(短除法)
三、C语言数据类型
1.数据类型分类:
①基本数据类型(C语言中自带的类型)
整数类型 浮点数类型 缺省类型 泊尔类型
②构造数据类型(用户自己定义的数据类型)
结构体 共用体 枚举
2.整数类型:
①分类
- 根据整数类型可以分为有符号类型signed和无符号类型unsigned,默认为有符号 (signed)类型
- 根据存储空间大小不同可以分为:短整型short、整形int、长整型long
②数据类型的大小
③注意事项:
- 有符号数在内存中存放数字对应的二进制补码形式,无符号数在内存中存放数字对应的二进制形式
eg:-32
原码 010 0000 (32对应的二进制)
反码 101 1111 (对原码取反)
补码 110 0000 (对反码进行"+1")
内存 1110 0000 (最左边的为符号位,1代表负数,0代表正数)
- 可以通过sizeof (数据类型/变量名)获得数据类型所占空间大小
3.字符类型:
- 字符类型用char表示,本质上也是一种整数类型。在C语言中char类型标识单个字符,能够从键盘中输入的都是字符(小写英文字母、大写英文字母、符号、字符类型用char表示,本质上也是一种整数类型数字字符)。eg:'A' 'a' '1' '!'
- ASCII码表规定字符和数字之间的转换关系:32号之前的字符用于通信控制,多数无法在终端显示,可能会显示乱码'a' -> 01100001 01100001 -> 'a' 'A' -> 01000001 01000001 -> 'A'
- 数据类型大小
4.浮点数类型:
- 浮点数所有均为有符号类型,没有无符号类型
- 浮点数类型分为单精度浮点数类型(float)、双精度浮点数类型(double)
- float类型存储(32位) == 符号位(1位)+ 指数位(8位)+尾数位(23位)
- double类型存储(64位) == 符号位(1位)+ 指数位(11位)+尾数位(52位)
- float类型精度6-8位,double类型精度12-16位
数据类型 | 空间大小 | 值域范围 |
float | 4个字节 | -3.402823*10^38 - 3.402823*10^38 |
double | 8个字节 | -1.971693*10^308 - 1.971693*10^308 |
5. 缺省类型 void
- void修饰函数参数或者函数返回值表示类型缺省
- void修饰指针,表示指针指向的类型是缺省的
6.泊尔类型(逻辑类型)
- bool 1个字节 true(1) false(0)
- C语言中使用bool类型需要加入头文件#include
- C语言非0值即为逻辑真值,0值即为逻辑假值
四、变量和常量
1.常量:程序运行过程中值不会发生改变的量;常量可以直接使用
①整形常量:默认signed int
eg: 123、-123、0x123、123u(unsigned int)、123l(long)
②浮点型常量: 默认 double
eg:3.123、3.123f(float)、3.123e15(指数)
③字符常量:
eg:'A' 、'a' 、'1' 、 '!'、 '\'' '字符 、'\\' \字符 、'\n' 换行符、 '\t' 制表符、 '\r' 回车符 、'\v' 纵向制表符、 '\b' 退格符、 '\0' \0字符表示字符串的结尾、'0' 字符0、'\八进制数' 八进制数为3位 、'\x十六进制数' 十六进制数2位
④ 字符串常量:字符串末尾有一个用来标识结尾的\0字符
eg:"hello" 'h' + 'e' + 'l' + 'l' + 'o' + '\0——六个字节
⑤标识常量:
#define 标识 常量
标识常量可以提高代码的可读性;宏只是代码的替换,中间不执行任何数据计算的处理;宏定义能加括号就加括号;标识常量名可以小写,但是一般都用大写(与变量名做以区分)
可以通过学习内容,试试下面的小测试。
2.变量:在程序运行过程中值可以发生改变的量
①变量必须先定义再使用,定义形式:数据类型 变量名()
变量名要求: 只能由字母、数字、下划线构成、不能以数字开头;
变量名不要与关键字重名,变量名最好不要与库函数重名;
变量名最好通俗易懂,便于理解;
变量有存储空间,变量名为该空间的标号;
②分类:
整形变量、浮点型变量、字符型变量
定义方式如下图所示
输出结果如下图
③变量初始化:
1. 变量未经初始化前值为随机值
2. 定义变量时,为变量赋初值
3. 变量定义完毕后一定要初始化,不要使用未经初始化变量
初始化方式如下所示