// C 语言标准输入输出库头文件,最基本的 C 语言头文件
#include
// main 函数是整个程序的入口
int main(int argc, int argv[])
{
/*
在控制台打印展示 hello world
%s 是 C 语言打印使用的标记类型,对应的字符串
*/
printf("%s\n", "Hello World!");
return 0;
}
需要使用编译工具是 GCC,编译格式
gmy@gmy:~/CODE/day2$ gcc 01_C语言第一行代码.c # 整体格式可以总结为 gcc 目标C语言文件.c # 得到的最终可执行文件是一个 a.out,默认的文件名和类型, .out在Linux 系统中是终端可执行文件,类似于 Windows 操作系统的 exe 文件
执行 a.out 终端可执行文件
gmy@gmy:~/CODE/day2$ ./a.out
# ./ 表示当前工作目录的文件, . 表示当前工作目录 / 是路径分隔符
# a.out 是可执行文件
# 执行结果
Hello World!
注意标点符号一定是英文符号/半角符号
成双成对的标点符号一次完成,不要后续补充。仅有一下标点符号:
“”, ‘’ , <> , [] , {} , ()
注意拼写问题,注意代码颜色,如果颜色不对劲,就是有问题。
注意代码格式,缩进对齐,必须提供必要的空格空行
计算机最小存储单位字节(byte), 一个字节对应 8 个比特位 (bit) 二进制位
存储单位的进制关系
1024 算术进制
1024 Byte ==> 1 KB
1024 KB ==> 1 MB
1024 MB ==> 1 GB
1024 GB ==> 1 TB
生产过程中使用进制是 1000 【了解】
开发中常用的数据进制有十进制 二进制 八进制 十六进制
进制 | 进制基数 | 禁止要求 |
---|---|---|
十进制 | 0 ~ 9 | 逢 10 进 1 |
二进制 | 0,1 | 逢 2 进 1 |
八进制 | 0 ~ 7 | 逢 8 进 1 |
十六进制 | 0 ~ 9,A ~ F | 逢 G (16)进 1 |
【了解】进制数据转换过程和数据展示形式
数据展示形式
十六进制数据展示要求, 0x 开头,或者 0X 开头
例如:
0xABCD 0xabcd 0xff11 0x11FF
十六进制不区分大小写
八进制数据展示要求,要求 0 开头,但是 0 可以省略
例如:
0777 0775 0555
二进制数据案例
0111 0110(2)
数据转换过程
- 熟练掌握计算机使用
0x11FF ABCD 十六进制
十进制 301,968,333
八进制 2 177 725 715
二进制 0001 0001 1111 1111 1010 1011 1100 1101
12345 八进制
十六进制 14E5
十进制 5,349
二进制 0001 0100 1110 0101
整数,浮点数,字符,字符串
数值:
10 20 30 -10 -20 -30 ==> 整数
3.14 6.18 ==> 小数/浮点数
文字:字符常量使用英文单引号包含,并且 C/C++ 不推荐使用单引号包含中文内容
'中' '好' 中文汉字
'A' 'B' 'C' 英文字母
'1' '2' '3' 数字字符
文本: ===> 字符串
字符串常量使用英文双引号包含,双引号内部的所有内容都是字符串内容
"北国风光,千里冰封,万里雪飘..."
#include
int main(int argc, char *argv[])
{
// 整数常量演示
printf("整数:%d\n", 10);
printf("整数:%d\n", 3);
printf("整数:%d\n", 1024);
// 浮点数常量演示
printf("浮点数:%f\n", 3.14);
printf("浮点数:%f\n", 6.18);
printf("浮点数:%f\n", 10.13);
// 字符常量演示,字符要求使用英文单引号包含的内容,C/C++ 不推荐包含中文
printf("字符:%c\n", 'A');
printf("字符:%c\n", '1');
// 中文汉字占用字节都是 2 ~ 3 字节,字符常量无法保存完整的中文汉字,有警告
printf("字符:%c\n", '我'); // 有乱码
//字符串常量
printf("%s\n", "北国风光,千里冰封···");
printf("%s\n", "晋太元中,武陵人捕鱼为业···");
return 0;
}
任何一个字符对于计算机而言都是一个【图片】,在计算机中使用一个表格,对每个图标进行编号处理,在使用字符数据过程中,计算机会根据对应的编号,选择对应的字符内容进行展示。
嵌入式开发中,常用的编码集
ASCII:美国信息标准化交互协会指定的编码集,包括所有的英文字符,标点符号和特殊字符串,同时要求任何一个国际流行的编码集,前 0 ~ 255 位置必须是 ASCII。
GBK:中国国标,包括中文简体字,全部少数民族文字。
UTF-8:万国码,包括中文简体字和其他国家文字。
BTG5:中国繁体字编码集,主要适用于中国香港,中国澳门,中国台湾省
ASCII 重点知识点
将无意义字符,转换为特定含义字符
\n 回车
\t 制表符/tab
\a 蜂鸣器
特定含义字符,转换无意义字符
\" 需要一个 " 字符
\' 需要一个 ’ 字符
\\ 需要一个 \ 字符
请问
\40 是什么???
1. \ 是一个转义字符标记
2. \ 之后要求的数据可以是八进制数据
3. 八进制数据可以省略标记 0
\40 ==> 八进制对应 040 字符 ==> sp 空格
【重点知识】
'\0' 表示编码集当中编号为 0 字符,为不可见字符,字符标记为 nul
开发中,根据当前数据情况,分门类别处理,选择不同的数据类型,更好管理操作数据,通过常量角度分析得到有以下数据类型
- 整数 short int long
- 浮点数 float double
- 字符串【特殊类型】
整数:一般用于存储整数相关数据内容,支持负数和正数,同时可以选择当前数据非负数
数据类型 | 占用内存空间字节数 | 数据范围 |
---|---|---|
short | 2字节(16bit) | -32768 ~ 32767 0 ~ 65535 |
int | 4字节(32bit) | -2^31 ~ 2^31 - 1 2^32 - 1 |
long | 8字节(64bit) | -2^63 ~ 2^63 - 1 2^64 - 1 |
int 类型占用内存字节数补充
- 在 32 位机器及其以上占用内存空间字节数是 4 字节
- 16位机器对应 2 个字节,8 位机器对应 1 个字节
long 类型占用内存字节数补充
- 在 64 位机器及其以上占用内存空间字节数是 8 字节
- 32 位机器对应 4 个字节
浮点数:用于存储小数数据,存在单精度和双精度情况,主要区别是数据存储范围和数据存储精度
数据类型 | 占用内存空间字节数 | 数据范围 |
---|---|---|
float | 4字节(32bit) | ± 10 ^ 38 |
double | 8字节(64bit) | ± 10 ^ 308 |
float 单精度浮点类型 和 double 双精度浮点类型
- float 数据存储范围小于 double
- float 数据精度没有 double 高
- 浮点数据精度情况在特定情况下无法满足开发需求,可能需要其他类型支持
字符类型:用于存储字符数据,但是对于中文的支持不友好
数据类型 | 占用内存空间字节数 | 数据范围 |
---|---|---|
char | 1字节(8bit) | 对应 ASCII 数据范围 |
数据类型 变量名 = 初始化数据
【注意】
开发要求,一行仅定义一个变量,并且进行初始化操作
数据类型:
1. 要求见名知意,推荐:
小驼峰命名法 studentName studentScore
下划线命名法 student_name student_score
2. 变量名在一定范围内唯一
3. 变量名是操作当前变量的关键名称
=:
赋值号,将赋值号右侧的数据,赋值给左侧的变量
右侧要求必须是一个变量,不可以是其他内容
初始化数据:
根据数据类型,目前的代码所需情况,原则合理合适的数据对当前变量进行初始化操作。
#include
int main(int argc, char *argv[])
{
/*
变量定义格式:
数据类型 变量名 = 初始化数据;
*/
// 当前定义的变量,变量数据类型为 short 类型,变量名为 num1
// 存储类型为 10
short num1 = 10;
// 变量数据类型为 int 类型,变量名为 num3
// 存储数据为 200
int num2 = 200;
//变量数据类型为 long 类型,变量名为 num3
// 存储数据为 1000
long num3 = 1000;
printf("num1 = %d\n", num1);
printf("num2 = %d\n", num2);
printf("num3 = %d\n", num3);
short num5 = 10000;
print("num5 = %d\n", num5);
// 03_整型变量定义案例.c:36:15: warning: overflow in implicit constant conversion [-Woverflow]
// short num5 = 100000;i
// 100000 超出了 short 类型支持的数据范围
return 0;
}
#include
int main(int argc, char *argv[])
{
// 数据类型 变量名 = 初始化数据;
/*
定义一个 float 类型变量,变量名为 num1
初始化数据赋值为 3.14
【建议】 3.14 常量之后使用大写 F 明确告知编译器
当前 3.14 是一个 float 类型数据,默认情况下,
计算机为了保证数据的精度范围,所有的浮点数
常量默认数据类型为 double 类型
【严格遵守数据类型一致化原则】
*/
float num1 = 3.14F;
// 定义了一个 double 类型变量,变量名为 num2
// 初始化数据赋值为 3.14
double num2 = 3.14;
printf("num1 = %f\n", num1);
printf("num2 = %f\n", num2);
return 0;
}
#include
int main(int argc, char *argv[])
{
//数据类型 变量名 = 初始化数据;
// 使用字符常量给予字符变量进行赋值操作,需要使用字符本身
//不推荐使用编码值
char ch1 = 'A';
char ch2 = '1';
char ch3 = '中';
printf("ch1 = %c\n", ch1);
printf("ch2 = %c\n", ch2);
printf("ch3 = %c\n", ch3);
return 0;
}
- 使用常量给予 float 类型变量赋值操作,建议采用大写 F 作为常量的结尾修饰
- 使用常量给予 long 类型变量赋值操作,建议采用大写 L 作为常量的结尾修饰
float num1 = 3.5F; // 明确告知计算机,当前 3.5 是一个 float 类型
long num2 = 1000L; // 明确告知计算机,当前 1000 是一个 long 类型
// 原则: 严格遵守数据类型一致化
- 变量已定义,但是在后续的使用过程中,因为拼写错误导致的变量未定义。
- 变量在使用之前尚未定义,从始至终未定义对应变量
要求变量在定义之后,如果尚未赋值的情况下,不建议参与除赋值之外的其他操作。因为变量存储的数据内容尚未明确,C/C++ 中对应变量的数据称之为【野值】,无法确定数值。
建议变量定义操作时,直接进行必要的初始化操作,防止野值出现
变量在一定范围内唯一,不可以重复定义,否则计算机无法对变量名称进行识别。