C语言学习笔记之 运算符

运算符

算术运算符

运算符 含义 举例 结果
+ 正号运算符(单目运算符) +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

优先级

原文地址:https://www.cnblogs.com/zhujiangyu/p/13589409.html