vim自动补全的基本概念

Vim自动补全是指在编辑文本时,通过特定触发方式或插件辅助,快速填充代码、单词或路径等内容的功能。其核心机制包括内置补全和插件扩展两类,旨在提升编码效率,vim自动补全是用vim进行编辑时强大的工具之一。

进入插入模式,输入main按tab键

修改配置文件

  1. 切换到家目录下
  2. cd切换到~/.vim中
  3. 切换到snippets中
  4. 使用vim打开c.snippets文件
  5. 找到main所在的位置,在灰色文字的部分按l,展开隐藏的内容
  6. 修改成自己想要的补全,再将文件保存退出

C语言常量概述

常量是指在程序运行过程中不能被修改的固定值。C语言中的常量分为多种类型,包括整型常量、浮点型常量、字符常量、字符串常量和枚举常量等。

整型常量

整型常量表示整数,可以是十进制、八进制或十六进制形式:

  • 十进制:直接书写数字,如 123-45
  • 八进制:以 0 开头,如 0123(相当于十进制的 83)。
  • 十六进制:以 0x0X 开头,如 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 访问指针指向的值)

运算符优先级

优先级从高到低的部分示例:

  1. ()[]->.
  2. !~++--+(正)、-(负)、*(指针)、&(地址)、sizeof
  3. */%
  4. +-
  5. <<>>
  6. <<=>>=
  7. ==!=
  8. &^|&&||?:= 及复合赋值

完整优先级表需参考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;
}

运行结果:

Logo

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

更多推荐