嵌入式学习之路
嵌入式
- C语言
- Day1(7.1)
- Day2(7.23)
- 4.常量
- 4.1 常量的概念
- 4.2 常量的分类
- 4.3 标识符常量的定义方式
- 5.二进制
- 5.1 进制
- 5.2 进制转换
- 5.3 原码、反码、补码
- 第 6 章 数据类型
- 6.1 整数类型
- 6.2 浮点类型
- 附录 十进制小数转二进制小数规则
- Day3(7.24)
C语言
Day1(7.1)
Day2(7.23)
4.常量
4.1 常量的概念
程序运行时,其值不能改变的量,即为常量。
4.2 常量的分类
字面量常量和标识符常量
4.3 标识符常量的定义方式
第一种方式 宏定义方式
#define 常量名 值
注意:不能加分号!!!
第二种方式 const 关键字方式
const 数据类型 常量名 = 值; 数据类型 const 常量名 = 值;
== 两种方式的区别==
- 类型检查
#define 方式不能进行类型检查
const 关键字方式可以进行类型检查- 执行时机不同
#define 方式在预处理阶段进行文本替换
const 关键字方式,在程序执行的时候,在内存中分配空间
5.二进制
5.1 进制
不同进制表示的字面量整数
- 直接写是十进制
- 0b开头是二进制
- 0x开头是十六进制
不同进制的输出格式占位符
%d十进制
%x十六进制
%X十六进制
%#x、%#X十六进制
5.2 进制转换
简单的换算方法:8421码
二进制转十进制:
从最低位开始,将每个位上的数提取出来,乘以2的(位数-1)次方,然后求和。
十进制转二进制:
将该数不断除以2,直到商为0为止,然后将每步得到的余数倒过来,就是对应的二进制。
十六进制转十进制:
从最低位开始,将每个位上的数提取出来,乘以16的(位数-1)次方,然后求和。
十进制转十六进制:
将该数不断除以16,直到商为0为止,然后将每步得到的余数倒过来,就是对应的十六进制。
二进制转十六进制:
低位开始,将二进制数每四位一组,转成对应的十六进制数即可。
十六进制转二进制:
将十六进制数每1位,转成对应的4位的一个二进制数即可。
5.3 原码、反码、补码
- 正数和0
原码、反码、补码都一样- 负数
原码:符号位是1,
反码:原码基础上,符号位不变,其他位取反
补码:反码基础上,加 1
第 6 章 数据类型
6.1 整数类型
整型划分
类型 | 类型简写 | 说明 | 存储大小(字节) |
---|---|---|---|
unsigned short int | unsigned short | 无符号短整型 | 2字节 |
signed short int | short、signed short | 有符号短整型 | 2字节 |
unsigned int | unsigned | 无符号整型 | 2或4字节 |
signed int | int、signed | 有符号整型 | 2或4字节 |
unsigned long int | unsigned long | 无符号长整型 | 4或8字节 |
signed long int | signed long、long | 有符号长整型 | 4或8字节 |
unsigned long long int | unsigned long long | 无符号长长整型 | 8字节 |
signed long long int | signed long long、long long | 有符号长长整型 | 8字节 |
注意:
(1)各类型存储大小受到操作系统、编译器、硬件平台的影响。
(2)整型分为有符号signed和无符号unsigned两种,默认是signed。
(3)开发中使用整型一般用int型,如果不足以表示大数,可以使用long long。
字面量后缀(不需要记)
数据类型 | 字面量后缀 | 数据类型 | 字面量后缀 |
---|---|---|---|
int | 无 | unsigned int | U |
long | L、l | unsigned long | UL、ul |
long long | LL、ll | unsigned long long | ULL、LLU、llu、ull |
注意: 字面量后缀不区分大小写。
格式占位符
数据类型 | 格式占位符 | 数据类型 | 格式占位符 |
---|---|---|---|
int | %d | unsigned int | %u |
short | %hd | unsigned short | %hu |
long | %ld | unsigned long | %lu |
long long | %lld | unsigned long long | %llu |
精确宽度整数类型
定义在标准库头文件 <stdint.h>
中:
int8_t
int16_t
int32_t
int64_t
uint8_t
uint16_t
uint32_t
uint64_t
6.2 浮点类型
浮点类型划分
数据类型 | 说明 | 存储长度 | 有效小数位数 |
---|---|---|---|
float | 单精度 | 4字节 | 6~9 |
double | 双精度 | 8字节 | 15~18 |
long double | 长双精度 | 10或16字节 | 18及以上 |
总结:
(1)各类型的存储大小和精度受到操作系统、编译器、硬件平台的影响。
(2)浮点型数据有两种表示形式。
* 十进制数形式:如:5.12、512.0f、.512(0.512 可以省略 0)
* 科学计数法形式:如:5.12e2、5.12E-2
(3)开发中用到浮点型数字,建议使用 double
字面量后缀(不需要记)
类型 | 字面量后缀 |
---|---|
float | F、f |
double | 无 |
long double | L、l |
注意: 字面量后缀不区分大小写。
格式占位符
数据类型 | 十进制小数形式对应的占位符 | 科学计数法形式对应的占位符 |
---|---|---|
float | %f | %e |
double | %lf | %le |
long double | %Lf | %le |
**注意:**printf 打印 double 类型数据,可以使用 %f 和 %lf; 如果 scanf() 获取输入的double类型只能使用 %lf。
浮点类型存储原理
符号位,决定正负
指数位,决定可表示数字范围
尾数位,决定精度
附录 十进制小数转二进制小数规则
使用乘 2 取整法,依次记录整数部分,直到达到所需精度或小数部分为0。
以 0.625 为例:
0.625 × 2 = 1.25,记录整数部分 1,小数部分 0.25
0.25 × 2 = 0.5,记录整数部分 0,小数部分 0.5
0.5 × 2 = 1.0,记录整数部分 1,小数部分 0.0,转换结束