1、操作符的分类
2、⼆进制和进制转换(番外)
常用到的有:二进制,八进制,十六进制
二进制转十进制:采用位权展开法。将二进制数的每一位乘以2的相应位数次幂,然后将结果相加。例如,二进制数1011转换为十进制:
1x2^3 + 1x0^2 + 1x2^1 + 1x2^0 = 8+0+2+1 = 11
十进制转二进制: 整数部分采用除2取余法,将十进制数除以2,取余数,然后将商继续除以2,直到商为0,将余数从下往上排列就是二进制数。例如,将十进制11转换为二进制:
11 / 2 = 5 ...... 1
5 / 2 = 2 ...... 1
2 / 2 = 1 ...... 0
1 / 2 = 0 ...... 1 所以11的二进制为1 0 1 1
二进制转八进制:
以小数点为界,将二进制数每三位分为一组,不足三位的在两端补0,然后将每组二进制数转换为对应的八进制数字。例如,二进制数1 1 0 1 1转换为八进制:先分组为011 010 ,对应的八进制数为32 (↓计算过程)
0x2^2 + 1x2^1 + 1x2^0 = 3 0x2^2 + 1x2^1 + 0x2^0 = 2
3、移位操作符
+ - * / %
(1)加法运算符 (+)
用于将两个操作数相加
(2)减法运算符(-)
从第一个操作数中减去第二个操作数。
(3)乘法运算符( * )
:将两个操作数相乘。
(4)除法运算符(/)
用第一个操作数除以第二个操作数。如果两个操作数都是整数,则结果也是整数,会舍去小数部分。
(5)取模运算符( % )
:计算两个整数相除的余数,该运算符只能用于整数操作数。
5/3=1......2
4、 位操作符:&、|、^、~
(1)按位与运算符( & )
:对两个操作数的对应二进制位进行逻辑与运算,只有当两个对应位都为1时,结果位才为1,否则为0。
(2)按位或运算符( | )
:对两个操作数的对应二进制位进行逻辑或运算,只要两个对应位中有一个为1,结果位就为1,只有当两个对应位都为0时,结果位才为0。
(3)按位异或运算符( ^ )
:对两个操作数的对应二进制位进行逻辑异或运算,当两个对应位不同时,结果位为1,相同时结果位为0。
(4)按位取反运算符( ~ )
:对操作数的每一位进行取反操作,即将0变为1,1变为0。
5. 单⽬操作符
单目操作符介绍
6. 逗号表达式
#include <stdio.h>
int main() {
int x, y;
// 逗号表达式中包含赋值操作,先将3赋给x,再将x + 1的值赋给y
(x = 3, y = x + 1);
// 输出x和y的值
printf("x的值为:%d\n", x);//3
printf("y的值为:%d\n", y);//4
return 0;
}
8. 下标访问[ ]、函数调⽤()
[ ] 下标引用操作符
int arr[10];//创建数组
//↓ 使用下标引用操作符 ,这里的9是数组arr中的第10个元素(因为下标从0开始)
arr[9] = 10;
函数调用()
以下是函数调用的基本步骤:
定义函数:包括函数的返回类型、函数名、参数列表(可以为空)以及函数体。
调用函数:在需要执行该函数功能的地方,使用函数名和相应的参数(如果有)来触发函数的执行。
#include <stdio.h>
// 函数定义:计算两个整数的和
int add(int a, int b) {
return a + b;
}
int main() {
int num1 = 5;
int num2 = 3;
// 函数调用,将num1和num2作为参数传递给add函数
int result = add(num1, num2);
printf("两数之和为: %d\n", result);
return 0;
}
add 函数被定义,它接受两个 int 类型的参数 a 和 b ,返回它们的和。
在 main 函数中,定义了两个整数 num1 和 num2 ,然后通过 add(num1, num2) 调用 add 函数,将 num1 和 num2 的值传递给 add 函数。 add 函数执行加法运算并返回结果,这个结果被赋值给 result 变量,最后打印出来。
↓再来一个五参数且无返回值的函数:
#include <stdio.h>
// 函数定义:打印一条问候语
void greet() {
printf("Hello, world!\n");
}
int main() {
// 函数调用
greet();
return 0;
}
这里的 greet 函数没有参数,也不返回任何值(返回类型为 void )。在 main 函数中通过 greet() 调用该函数,它会直接在控制台打印出问候语。
9. 结构成员访问操作符
点操作符(.)
:用于通过结构变量访问其成员。当你有一个结构类型的变量时,可以使用点操作符来访问该结构中的成员。
#include <stdio.h>
// 定义一个结构体
struct Student {
char name[20];
int age;
};
int main() {
struct Student stu;
// 使用点操作符访问结构体成员并赋值
strcpy(stu.name, "Tom");
stu.age = 20;
// 使用点操作符访问结构体成员并输出
printf("姓名:%s,年龄:%d\n", stu.name, stu.age);
return 0;
}
箭头操作符( -> )
:用于通过指向结构的指针访问结构成员。当你有一个指向结构的指针时,需要使用箭头操作符来访问所指向结构的成员。
#include <stdio.h>
#include <string.h>
//定义一个结构体
struct Student {
char name[20];
int age;
};
int main() {
struct Student stu;
struct Student *pStu = &stu;
// 使用箭头操作符访问结构体成员并赋值
strcpy(pStu->name, "Jerry");
pStu->age = 21;
// 使用箭头操作符访问结构体成员并输出
printf("姓名:%s,年龄:%d\n", pStu->name, pStu->age);
return 0;
}
10. 操作符的属性:优先级、结合性
优先级
含义:操作符的优先级决定了在一个复杂表达式中,哪些操作会先执行,哪些会后执行。优先级高的操作符会先于优先级低的操作符进行计算。
示例:在表达式 3 + 4 * 2 中,乘法 * 的优先级高于加法 + ,所以先计算 4 * 2 ,得到8,然后再计算 3 + 8 ,最终结果为11。
结合性
含义:当一个表达式中出现多个优先级相同的操作符时,结合性决定了这些操作符的计算顺序。结合性分为左结合和右结合。左结合的操作符从左到右进行计算,右结合的操作符从右到左进行计算。
示例:对于加法和减法,它们的优先级相同且都是左结合。在表达式 9 - 3 + 2 中,先计算 9 - 3 得到6,再计算 6 + 2 得到8。对于赋值操作符 = ,它是右结合的。在语句 a = b = 5 中,先将5赋给 b ,然后再将 b 的值赋给 a 。