嵌入式开发学习———Linux环境下C语言学习(二)
vim自动补全的基本概念
Vim自动补全是指在编辑文本时,通过特定触发方式或插件辅助,快速填充代码、单词或路径等内容的功能。其核心机制包括内置补全和插件扩展两类,旨在提升编码效率,vim自动补全是用vim进行编辑时强大的工具之一。
进入插入模式,输入main按tab键
修改配置文件
- 切换到家目录下
- cd切换到~/.vim中
- 切换到snippets中
- 使用vim打开c.snippets文件
- 找到main所在的位置,在灰色文字的部分按l,展开隐藏的内容
- 修改成自己想要的补全,再将文件保存退出

C语言常量概述
常量是指在程序运行过程中不能被修改的固定值。C语言中的常量分为多种类型,包括整型常量、浮点型常量、字符常量、字符串常量和枚举常量等。
整型常量
整型常量表示整数,可以是十进制、八进制或十六进制形式:
- 十进制:直接书写数字,如
123、-45。 - 八进制:以
0开头,如0123(相当于十进制的83)。 - 十六进制:以
0x或0X开头,如0x1A(相当于十进制的26)。
示例代码:
int a = 10; // 十进制
int b = 012; // 八进制
int c = 0xA; // 十六进制
浮点型常量
浮点型常量表示实数,分为小数形式和指数形式:
- 小数形式:如
3.14、-0.001。 - 指数形式:如
1.23e5(表示 $1.23 \times 10^5$)。
示例代码:
float pi = 3.14159;
double distance = 1.5e11; // 表示1.5×10^11
字符常量
字符常量用单引号括起来,表示单个字符:
- 普通字符:如
'A'、'#'。 - 转义字符:如
'\n'(换行符)、'\t'(制表符)。
示例代码:
char ch1 = 'a';
char newline = '\n';
字符串常量
字符串常量用双引号括起来,表示一串字符:
- 如
"Hello, World!"。 - 字符串末尾会自动添加空字符
'\0'作为结束标志。
示例代码:
char str[] = "C Programming";
符号常量(宏定义)
使用 #define 定义的符号常量,编译时直接替换:
#define PI 3.1415926
#define MAX_SIZE 100
注意事项
- 常量在定义后不可修改,否则会导致编译错误。
- 宏定义仅为文本替换,简单的替换。

算术运算符
用于执行基本数学运算:
+:加法(如a + b)-:减法(如a - b)*:乘法(如a * b)/:除法(如a / b,整数除法会截断小数)%:取模(如a % b,返回除法余数)++:自增(如a++或++a,前缀与后缀有区别)--:自减(如a--或--a)
关系运算符
用于比较操作数的大小关系,返回 0(假)或 1(真):
==:等于(如a == b)!=:不等于(如a != b)>:大于(如a > b)<:小于(如a < b)>=:大于等于(如a >= b)<=:小于等于(如a <= b)
逻辑运算符
用于组合或反转逻辑条件:
&&:逻辑与(如a && b,两者为真则返回1)||:逻辑或(如a || b,任一为真则返回1)!:逻辑非(如!a,反转操作数的逻辑状态)
位运算符
直接对二进制位进行操作:
&:按位与(如a & b,对应位均为1则结果为1)|:按位或(如a | b,对应位任一为1则结果为1)^:按位异或(如a ^ b,对应位不同则结果为1)~:按位取反(如~a,反转所有位)<<:左移(如a << 2,二进制位左移,低位补0)>>:右移(如a >> 2,二进制位右移,高位补符号位或无符号0)
赋值运算符
用于赋值或组合运算与赋值:
=:简单赋值(如a = b)+=、-=、*=、/=、%=:复合赋值(如a += b等价于a = a + b)&=、|=、^=、<<=、>>=:位运算复合赋值(如a &= b等价于a = a & b)
其他运算符
?::条件运算符(三元运算符,如a > b ? a : b),:逗号运算符(如a = (b=2, b+3),结果为5)sizeof:返回变量或类型的大小(字节数,如sizeof(int))&:取地址(如&a返回变量a的地址)*:指针解引用(如*ptr访问指针指向的值)
运算符优先级
优先级从高到低的部分示例:
()、[]、->、.!、~、++、--、+(正)、-(负)、*(指针)、&(地址)、sizeof*、/、%+、-<<、>><、<=、>、>===、!=&、^、|、&&、||、?:、=及复合赋值
完整优先级表需参考C语言标准文档。

作业:
1.两个数的交换
1.三杯水的交换利用一个中间值来交换
2.异或交换利用了按位异或的特性:
1.当一个数a与其本身按位异或时,会等于0,即a ^ a = 0
3.当一个数a与0按位异或时,会等于其本身,即a ^ 0 = a
3.求和交换
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
int main(int argc, const char *argv[])
{
//三杯水交换
//缺点:会发生空间资源的浪费
int i,j,temb;
printf("请输入两个整数:\n");
scanf(" %d %d",&i,&j);
printf("i=%d\tj=%d\n",i,j);
temb=i;
i=j;
i=temb;
printf("i=%d\tj=%d\n",i,j);
putchar(10);
//按位异或交换
//缺点:操作同一片空间会置零
int a,b;
printf("请输入两个整数:\n");
scanf(" %d %d",&a,&b);
printf("a=%d\tb=%d\n",a,b);
a=a^b; //a = a ^ b
b=a^b; //b = a ^ b = a ^ b ^ b(带入上式) = a ^ 0 = a
a=a^b; //a = a ^ b = a ^ b ^ a(带入上式) = a ^ a ^ b = 0 ^ b = b
printf("a=%d\tb=%d\n",a,b);
putchar(10);
//求和交换
//缺点:会发生数据溢出
int q,w;
printf("请输入两个整数:\n");
scanf(" %d %d",&q,&w);
printf("q=%d\tw=%d\n",q,w);
q+=w;
w=q-w;
q-=w;
printf("q=%d\tw=%d\n",q,w);
return 0;
}
运行结果:

2.已知unsigned int a; 在不改变其他bit的基础上,将a的第4个bit位置0;将a的第6个bit位置1,将a的第2个bit位取反(bit位默认从第0位开始)
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
int main(int argc, const char *argv[])
{
unsigned int a=0xFFFF;//a=1111 1111 1111 1111
//在不改变其他位的基础上,将a的第4位置0
a=a&(~(0X1<<4));// (1111 1111 1111 1111)&(1111 1111 1110 1111)
printf("a=%#x\n",a);//1111 1111 1110 1111
putchar(10);
//在不改变其他位的基础上,将a的第6位置1
a=0x0000;
a=a|(0X1<<6);// (0000 0000 0000 0000)|(0000 0000 0100 0000)
printf("a=%#x\n",a);//0000 0000 0100 0000
putchar(10);
//在不改变其他位的基础上,将a的2位取反
a=0xFFFF;
a=a^(0X1<<2);// (1111 1111 1111 1111)&(0000 0000 0000 0100)
printf("a=%#x\n",a);//1111 1111 1111 1011
putchar(10);
return 0;
}
运行结果:

openvela 操作系统专为 AIoT 领域量身定制,以轻量化、标准兼容、安全性和高度可扩展性为核心特点。openvela 以其卓越的技术优势,已成为众多物联网设备和 AI 硬件的技术首选,涵盖了智能手表、运动手环、智能音箱、耳机、智能家居设备以及机器人等多个领域。
更多推荐


所有评论(0)