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\n", a);

	int b = 64;
	b = (char)b;
	printf("%c\n", b);

	int c = 2;
	c = (double)c;
	printf("%.2f\n",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\n", (bool_true || true));
	printf("1 || 0 = %d\n", (bool_true || bool_false));
	printf("0 || 0 = %d\n", (bool_false || false));
	printf("1 && 1 = %d\n", (bool_true && true));
	printf("1 && 0 = %d\n", (bool_true && bool_false));
	printf("0 && 0 = %d\n", (bool_false && false));
	printf("!1 = %d\n", (!bool_true));
	printf("bool_true = %d\n", 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

优先级

posted @ 2020-08-31 14:35  小宇宙zjy  阅读(233)  评论(0编辑  收藏  举报