运算符
算术运算符
运算符 | 含义 | 举例 | 结果 |
---|---|---|---|
+ | 正号运算符(单目运算符) | +a | a的值 |
- | 负号运算符(单目运算符) | -a | a的算术负值 |
* | 乘法运算符 | a * b | a和b的乘积 |
/ | 除法运算符 | a / b | a和b的商 |
+ | 加法运算符 | a + b | a和b的和 |
- | 减法运算符 | a - b | a和b的差 |
% | 求余运算符 | a % b | a除以b的余数 |
注意!其中除法运算符两端都是整型时,结果会舍去小数部分,即取整后向零靠拢
例:
3 / 2; // 返回1
-5 / 3; // 返回-1
自增、自减运算符
++i,--i; // 在使用i之前,先使i的值加(减)1
i++,i--; // 在使用i之后,再使i的值加(减)1
注意!自增、自减运算符只能用于左值
++i与i++的对比
// main.c
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main() {
int i = 0;
// i++
i++;
//++i
++i;
return 0;
}
int data = 0;
用VS查看其汇编代码:
看不出区别,接着用Python来测试
// i++.c
int main() {
for (int i = 0; i < 100000000; i++) {
;
}
return 0;
}
// ++i.c
int main() {
for (int i = 0; i < 100000000; ++i) {
;
}
return 0;
}
结论:++i比i++效率高,且循环次数越多,差距越明显
强制类型转换运算符
语法:
(类型名)(表达式);
例:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main() {
double a = 3.14;
a = (int)a;
printf("%d
", a);
int b = 64;
b = (char)b;
printf("%c
", b);
int c = 2;
c = (double)c;
printf("%.2f
",c);
return 0;
}
运行结果:
0
@
0.00
注意!强制类型转换很可能会造成精度丧失
条件运算符(三目运算符)
语法:
表达式1 ? 表达式2 : 表达式3
如果表达式1的值非0,返回表达式2,否则返回表达式3
例:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main() {
int a, b;
printf(">");
scanf("%d %d", &a, &b);
getchar();
int max = (a > b) ? a : b;
printf("max = %d", max);
return 0;
}
运行结果:
>1 2
max = 2
int max = (a > b) ? a : b; 相当于: if (a > b) { int max = a; } else { int max = b; }
指针运算符
- 和&(在指针中会讲)
& 取地址运算符
&对象 返回该对象的内存地址
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main() {
int a = 0;
printf("a的地址:%p", &a);
return 0;
}
运行结果:
a的地址:000000AC23D8F554
关系运算符
运算符 | 含义 |
---|---|
== | 等于 |
< | 小于 |
> | 大于 |
>= | 大于等于 |
<= | 小于等于 |
!= | 不等于 |
逻辑运算符
运算符 | 含义 | 举例 | 结果 |
---|---|---|---|
! | 逻辑非 | !0 | 1 |
&& | 逻辑与 | 1 && 0 | 0 |
|| | 逻辑或 | 1 || 0 | 1 |
例:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdbool.h>
int main() {
_Bool bool_true = true;
_Bool bool_false = false;
// true = 1; false = 0
printf("1 || 1 = %d
", (bool_true || true));
printf("1 || 0 = %d
", (bool_true || bool_false));
printf("0 || 0 = %d
", (bool_false || false));
printf("1 && 1 = %d
", (bool_true && true));
printf("1 && 0 = %d
", (bool_true && bool_false));
printf("0 && 0 = %d
", (bool_false && false));
printf("!1 = %d
", (!bool_true));
printf("bool_true = %d
", bool_true);
return 0;
}
运行结果:
1 || 1 = 1
1 || 0 = 1
0 || 0 = 0
1 && 1 = 1
1 && 0 = 0
0 && 0 = 0
!1 = 0
bool_true = 1