嵌入式系统学习Day2(C语言中的基本数据类型及存储)
C语言中的数据类型有以下几种(1)整型(2)浮点型//小数(3)字符型//处理现实生活中 符号 文字今天学习的是第一类:基本数据类型以及数据的存储。在学习前要掌握基本进制间的相互转换。
前言:
C语言中的数据类型有以下几种
1.基本数据类型
(1)整型
(2)浮点型//小数
(3)字符型//处理现实生活中 符号 文字
2.构造数据类型
3.指针类型
4.空类型
今天学习的是第一类:基本数据类型以及数据的存储。
在学习前要掌握基本进制间的相互转换。
一.C语言中数据在形式上的分类
主要分为变量和常量。其中在程序运行过程中,其值能被改变的量称为变量,在程序运行过程中,其值不能被改变的量称为常量。
二.整形
1. 整型的常量形式:
123 //十进制
0x123 //十六进制
0123 //八进制
2.整形的变量
数据类型 变量名; //定义变量 (语法)
数据类型 (int/short/long / long long)
变量名
名字 (标识符)
规则:
1.数字、字母、下划线
2.不能以数字开头
3.区分大小写
4.不要和系统中二级关键字重名 (include define)
5.不能和C语言中的关键字重名 (32个关键字)
6.不要和系统中库函数 重名
int a; //表示定义了一个叫a的int类型的变量
//意味着此时,在内存空间上,开辟了一个 int型大小的空间,这块空间叫做a
有空间后,可以给值
int a //1.初始化 开空间的同时 给值
//2.赋值
eg:
int a; //开了一块空间
a=123; //赋值
空间的大小:
要看对应的数据类型的大小
int -- 4字节
short -- 2字节
long -- 8字节
long long -- 8字节
sizeof(变量名/数值/类型) //运算符 ---计算机 对应的类型所在空间的大小 ---字节数
3.整形数据的存储
那数据在存储时是按照什么顺序呢?
字节序问题(字节的顺序问题)
在常见的存储器中存储可以分为大端存储和小端存储,我们主要介绍大端存储,小端存储则与之相反。
大端:
其存储遵循“高高低低”的准则。它的意思就是高位数据 放在高地址处,低位数据 放到低地址处。在学习中常见的大端存储有51单片机等。
小端:
原理不过多介绍,arm芯片默认是小端存储,但其可以通过芯片上的开关改为大端存储。
int a = 123;
int a = -123;
123 ? --- 123怎么存到计算机 (转换为二进制存到计算机)
unsigned int //无符号的整型 非负数
signed int //有符号的整型 负数 0 正数
int //4字节
unsigned int //无符号 意味着 这32个位 全部都是 数值位
0000 0000 0000 0000 0000 0000 0000 0000
signed int //有符号 意味着 这32个位 被划分位了符号位(最高位) 和 数值位
0|000 0000 0000 0000 0000 0000 0000 0000
正的整数
int a = 123;
结论:
整数
都是按照补码的形式存储
正的整数:
原码 反码 补码 都是一样的
原码 --- 就是直接用二进制形式表示原有的数值
123
0000 0000 0000 0000 0000 0000 0111 1011 (原码值)
0 0 0 0 0 0 7 B
负的整数
补码 = 反码 + 1
-123
原码:
1|000 0000 0000 0000 0000 0000 0111 1011
反码(原码符号位不变,其余位按位取反):
1|111 1111 1111 1111 1111 1111 1000 0100
补码(反码+1):
1|111 1111 1111 1111 1111 1111 1000 0101
f f f f f f 8 5
为啥需要补码?
cpu中只具备加法器,所以我们把所有的运算都转化为加法
补码 --- 负数 减法
12 - 7 = 5
12 + (-7) = 5
12 + (12-7)
=> 12 + 5 = 17 =>5
4.整型数据的溢出
unsigned short a =65535;
a = a + 1;
printf("a = %d\n",a);
0000 0000 0000 0000
- 1
----------------------
1111 1111 1111 1111
1111 1111 1111 1111 + 1
10000 0000 0000 0000 //溢出
signed short a = -32768;
a = a - 1;
printf("a = %d\n",a);
结论:
所在数据范围内的最大值 + 1 ,会变成所在范围的最小值
所在数据范围内的 最小值 - 1 , 所在数据范围内的 最大值
4.整型常量指定类型
整型常量 默认识别为int类型
123L //将123 指定为long类型
123LL //将123 指定为long long 类型
123LU //将123 指定为unsigned long类型
三.浮点类型(小数)
1.浮点类型的常量形式
1.234
1.234e3 //科学计数法 1.234 * 10 ^ 3
1.234E-3 // 1.234 * 10 ^ -3
2.浮点型变量
float //单精度 --- 4字节
double //双精度 --- 8字节
3.小数存储到计算机
eg:
12.125
step1: 将十进制形式的小数 转换成 二进制形式的效果
12.125
整数 --- 除2取余法
小数 --- 乘2取整法
12 ---> 1100
0.125 * 2 = 0.25 ... 0
0.25 * 2 = 0.5 ... 0
0.5 * 2 = 1.0 ... 1
1100.001
step2: 将二进制形式小数,写成科学计数法形式
1100.001 ==> 1.100001 * 2^3
step3: 按IEEE754标准来存放
float
1位 8位 23位
符号位 | 指数位 | 尾数位
最高位
0 |3 + 127|
-127
+128
10000010 100001
0100 0001 0100 0010 0000 0000 0000 0000
4 1 4 2 0 0 0 0
eg:6.125(在代码中实现)


4.浮点型常量指定类型
1.代码中出现的浮点常量,默认被识别为 double类型
2.常量有默认的识别类型
小数 默认识别为double类型
0.9f //f表示将0.9识别为float类型
四.字符型
1.字符型常量
'a' //单个字符
2.字符型变量
char //1字节大小
char ch = 'a';
3.空间大小
//1字节大小
4.字符型数据的存储
char ch = 'a';
'a' ---ASCII编码值---97 //还是整数数值
5.ASCII表
0~32 没有实际字符形式 (符号) --- 控制字符
不可见字符
控制效果
48~57 数字字符
'0'~'9'
数字字符 数值数字 间转换
'1' -'0' => 1
1 + '0' => '1'
65~90 'A'~'Z'
97~122 'a'~'z'
char ch = 'A';
printf("ch = %c\n",ch+32);
openvela 操作系统专为 AIoT 领域量身定制,以轻量化、标准兼容、安全性和高度可扩展性为核心特点。openvela 以其卓越的技术优势,已成为众多物联网设备和 AI 硬件的技术首选,涵盖了智能手表、运动手环、智能音箱、耳机、智能家居设备以及机器人等多个领域。
更多推荐


所有评论(0)