目录
- 🎈个人主页🎈:linux_嵌入式大师之路的博客-CSDN博客
- 🎉🎉🎉欢迎 👍点赞✍评论⭐收藏
- 🤝希望本文能对你有所帮助,欢迎在评论区交流讨论!🤝
一.算术运算符
c语言中的算法运算符包括: + - * / %
加法运算符(+):用于两个数字相加。
int a = 5;
int b = 3;
int sum = a + b;
printf("Sum: %d", sum); // 输出结果为8
减法运算符(-):用于两个数字相减。
int a = 5;
int b = 3;
int difference = a - b;
printf("Difference: %d", difference); // 输出结果为2
乘法运算符(*):用于两个数字相乘。
int a = 5;
int b = 3;
int product = a * b;
printf("Product: %d", product); // 输出结果为15
除法运算符(/):用于两个数字相除,得到商。整数除法会截断小数部分,只保留整数部分。
int a = 10;
int b = 3;
int quotient = a / b;
printf("Quotient: %d", quotient); // 输出结果为3
取余运算符(%):用于两个数字相除,得到余数。取余运算符用于判断一个数是否为另一个数的整数倍。
int a = 10;
int b = 3;
int remainder = a % b;
printf("Remainder: %d", remainder); // 输出结果为1
/和%常用于数的分离:
int a = 0;
int b = 0;
a = 101/10;
b = 101%10;
printf("Quotient: %d, Remainder: %d", a, b); // 输出结果为10, 1
二.关系运算符
c语言中的关系运算符包含 < > <= >= == !=,比较两个值之间的关系,并返回一个布尔值(1或0)
#include <stdio.h>
int main() {
int a = 5;
int b = 10;
// 相等
if(a == b) {
printf("a等于b\n");
} else {
printf("a不等于b\n");
}
// 不等于
if(a != b) {
printf("a不等于b\n");
} else {
printf("a等于b\n");
}
// 大于
if(a > b) {
printf("a大于b\n");
} else {
printf("a不大于b\n");
}
// 小于
if(a < b) {
printf("a小于b\n");
} else {
printf("a不小于b\n");
}
// 大于等于
if(a >= b) {
printf("a大于等于b\n");
} else {
printf("a小于b\n");
}
// 小于等于
if(a <= b) {
printf("a小于等于b\n");
} else {
printf("a大于b\n");
}
return 0;
}
三.逻辑运算符
逻辑运算符包含&& || !,对表达式进行逻辑操作,并返回一个布尔值(真或假),真为1,假为0。
与运算符(&&):当且仅当两个操作数都为真时,结果为真。否则,结果为假。
#include <stdio.h>
int main() {
int x = 5;
int y = 10;
if (x > 0 && y > 0) {
printf("Both x and y are positive.\n");
} else {
printf("Either x or y is not positive.\n");
}
return 0;
}
在此示例中,使用与运算符检查变量x和y是否都大于0。如果是,输出“Both x and y are positive.”;
否则输出“Either x or y is not positive.”。
或运算符(||):当至少有一个操作数为真时,结果为真。只有当两个操作数都为假时,结果才为假
#include <stdio.h>
int main() {
int x = 5;
int y = -10;
if (x > 0 || y > 0) {
printf("Either x or y is positive.\n");
} else {
printf("Both x and y are not positive.\n");
}
return 0;
}
在此示例中,使用或运算符检查变量x和y是否至少有一个大于0。如果是,输出“Either x or y is positive.”;
否则输出“Both x and y are not positive.”。
非运算符(!):用于取反操作,如果操作数为真,则结果为假;如果操作数为假,则结果为真。
#include <stdio.h>
int main() {
int x = 5;
if (!(x > 0)) {
printf("x is not positive.\n");
} else {
printf("x is positive.\n");
}
return 0;
}
在此示例中,使用非运算符将大于0的条件取反。如果x不大于0,输出“x is not positive.”;
否则输出“x is positive.”。
四.位运算符
位运算符主要包括按位与(&)、按位或(|)和按位取反(~)。
按位与(&)运算符:
- 该运算符用于对两个操作数的每个位执行逻辑与操作。
- 运算规则:如果两个相应的位都为1,则结果为1;否则结果为0。
- 代码示例:
unsigned int a = 5; // 二进制表示为 00000101
unsigned int b = 3; // 二进制表示为 00000011
unsigned int result = a & b; // 结果为 00000001,即 1
按位或(|)运算符:
- 该运算符用于对两个操作数的每个位执行逻辑或操作。
- 运算规则:如果两个相应的位中至少有一个为1,则结果为1;否则结果为0。
- 代码示例:
unsigned int a = 5; // 二进制表示为 00000101
unsigned int b = 3; // 二进制表示为 00000011
unsigned int result = a | b; // 结果为 00000111,即 7
按位取反(~)运算符:
- 该运算符用于对操作数的每个位执行逻辑取反操作,即将每个位的1变为0,0变为1。
- 代码示例:
unsigned int a = 5; // 二进制表示为 00000101
unsigned int result = ~a; // 结果为 11111010,即 250
位运算符主要用于位操作,例如在位掩码、数据加密和位操作设备寄存器等方面。务必小心使用这些运算符,确保正确地处理位级操作和数据类型。
P0=P0|(1<<n) 置位
P0=P0&(~(1<<n)) 清零
五.移位运算符
移位运算符主要包含<< >>,用于对一个数进行位移操作,移位运算符的特点:
- << >> 移位运算符不改变原变量本身(强制类型转换也不改变原变量本身的类型)
- 移位常用来给寄存器和IO端口赋值,如P0=(1<<1)
- 移位运算的溢出问题
左移运算符(<<):将一个数的二进制表示向左移动指定的位数。左侧空出的位用零填充。
#include <stdio.h>
int main() {
int num = 5;
int result = num << 2;
printf("结果:%d\n", result);
return 0;
}
输出结果将为:20
变量num的二进制表示为0000 0101。通过将它左移两位,空出的两位将用零填充,得到结果0001 0100,即十进制的20。
右移运算符(>>):将一个数的二进制表示向右移动指定的位数。右侧空出的位用符号位(正数用0,负数用1)填充。对于无符号整数,右移运算符始终用零填充空出的位。
#include <stdio.h>
int main() {
int num = -20;
int result = num >> 2;
printf("结果:%d\n", result);
return 0;
}
输出结果将为:-5
在这个示例中,变量num的二进制表示为1111 1111 1111 1111 1111 1111 1110 1100。通过将它右移两位,空出的两位将用符号位填充,得到结果1111 1111 1111 1111 1111 1111 1111 0110,即十进制的-5。
六.自增减运算符
自增减运算符使用方式包含 ++a,a++,--a,a--,需要注意的是后置加减永远在语句结束后才执行
#include <stdio.h>
int main()
{
int a = 10;
int i = 0;
printf("%d %d\n", a++, ++a);
for(i = 0; i < 1; ++i)
{
printf("%d\n", i);
}
for(i = 0; i < 1; i++)
{
printf("%d\n", i);
}
return 0;
}
输出结果:
11 12
0
0
七.条件运算符(唯一的三目运算符)
语法:条件 ? 表达式1 : 表达式2
- 如果"条件"表达式的值为真(非零),则执行"表达式1",并将其结果作为整个三目运算符的结果。
- 如果"条件"表达式的值为假(零),则执行"表达式2",并将其结果作为整个三目运算符的结果。
#include <stdio.h>
int main() {
int num = 10;
char* result;
result = (num % 2 == 0) ? "偶数" : "奇数";
printf("%d 是 %s\n", num, result);
return 0;
}
输出结果:10 是 偶数
八.逗号运算符:
优先级最低的运算符,逗号运算符可以用于多个表达式的顺序执行以及函数参数列表中的多个参数传递。在使用逗号运算符时,需要注意表达式求值的顺序以及逗号运算符的优先级。
九.运算符优先级:
初等运算符([],->等等)--》单目运算符--》算术运算符 --》关系运算符--》逻辑运算符(不包括!)--》条件运算符--》 赋 值运算符--》逗号运算符
十.强制类型转换与隐式转换
整型数可以强制转换为指针类型
强制类型转换也不改变原变量本身的类型