C语言运算符详解:分类、优先级与类型转换

周末不加班
周末不加班
发布时间:2026-10-13 | 2人浏览过
原创

C语言中的运算符是构建程序逻辑的基础,包括算术、赋值、比较、逻辑等多种类型。理解运算符的优先级和结合性对于编写正确无误的代码至关重要。本文将系统梳理各类运算符的用法,通过具体代码示例展示其实际效果,并深入探讨运算符优先级规则及数据类型转换原则。

常用运算符概览

C语言的运算符种类丰富,按照功能主要分为以下几类:

算术运算符

算术运算符用于基本的数学计算。除了常规的加减乘除外,C语言还提供了取余和幂运算的支持方式。

第1步:实现基本四则运算与取余

在C语言中,加法+、减法-、乘法*和除法/的使用方式与数学符号一致。需要注意的是,整数除法会自动舍弃小数部分;而取余运算符%仅适用于整数,用于获取两数相除后的余数。

#include <stdio.h>
#include <math.h>
int main(void)
{
	int a = 10;
	int b = 20;
	int C, D, E, F, G, H, I, K, M;

	// 加
	C = a + b;  // 30
	// 减
	D = b - a;  // 10
	// 乘
	E = a * b;  // 200
	// 除(整数除法,结果为5)
	F = a / b;  // 0 (因为10/20在整数中为0)
	// 取余
	G = a % b;  // 10

	printf("C=%d\nD=%d\nE=%d\nF=%d\nG=%d\n", C, D, E, F, G);
	return 0;
}

第2步:处理自增自减与平方运算

关于自增++和自减--,需要区分前缀和后缀形式:a++是先使用a的值,再让a加1;而++a是先让a加1,再使用新值。由于原稿中对前后自增的解释存在混淆,这里以标准C语言规则为准进行修正演示。

此外,C语言中没有直接的幂运算符^(该符号在C中按位异或),若要计算平方需借助math.h库中的pow()函数。

#include <stdio.h>
#include <math.h>
int main(void)
{
	int a = 10;
	int b = 20;
	int K, M, H, I;

	// 后自增测试:K取b自增前的值? 不,示例中使用的是++a和--b的逻辑
	// 注意:原稿代码变量复用有冲突,此处重新整理清晰逻辑
	K = ++a; // a先变为11,K赋值为11
	M = --b; // b先变为19,M赋值为19

	// 平方运算:必须包含math.h并调用pow
	H = pow(a, 2); // 11 * 11 = 121
	I = a * (a + b); // 11 * (11 + 20) = 341

	printf("K=%d\nM=%d\nH=%d\nI=%d\n", K, M, H, I);
	return 0;
}

运行上述代码,可获得如下结果输出:

赋值运算符

赋值运算符不仅可以将右侧的值赋给左侧变量,还支持在赋值过程中进行计算,即“复合赋值”。

常见的复合赋值包括:+=、-=、*=、/= 和 %=。例如 a += 2 等价于 a = a + 2。这种方式使代码更简洁。

#include <stdio.h>
int main(void)
{
	int a = 10, b = 20, c = 30, d = 40, e = 33;
	int A, B, C, D, E, F;

	A = a;       // 普通赋值,A=10
	B = a += 2;  // a变成12,B也等于12
	C = b -= 3;  // b变成17,C也等于17
	D = c *= 2;  // c变成60,D也等于60
	E = d /= 2;  // d变成20,E也等于20
	F = e %= 2;  // e变成1,F也等于1

	printf("A=%d B=%d C=%d D=%d E=%d F=%d\n", A, B, C, D, E, F);
	return 0;
}

执行结果如下:

比较运算符

比较运算符用于判断两个值之间的关系,其结果是一个布尔值。在C语言中,关系成立(真)返回1,不成立(假)返回0。

常用的比较符号包括:==(等于)、!=(不等于)、<(小于)、>(大于)、<=(小于等于)和 >=(大于等于)。需注意=是赋值,==才是比较。

#include <stdio.h>
int main(void)
{
	int a = 10;
	int b = 20;
	
	printf("a==b: %d\n", a == b); // 0 (假)
	printf("a!=b: %d\n", a != b); // 1 (真)
	printf("a<b:  %d\n", a < b);   // 1 (真)
	printf("a>b:  %d\n", a > b);   // 0 (假)
	printf("a<=b: %d\n", a <= b);  // 1 (真)
	printf("a>=b: %d\n", a >= b);  // 0 (假)
	
	return 0;
}

运行结果:

逻辑运算符

逻辑运算符用于组合多个条件表达式。

  • ! (非):取反。如果操作数为0,结果为1;否则为0。
  • && (与):只有当左右两边都为真(非0)时,结果才为1。
  • || (或):只要有一边为真,结果就为1。
#include <stdio.h>
int main(void)
{
	int a = 0; // 假
	int b = 1; // 真
	
	printf("!a, !b: %d %d\n", !a, !b); // 1 0
	printf("a && b: %d\n", a && b);   // 0 (0和非0与为0)
	printf("a || b: %d\n", a || b);    // 1 (0或非0或为1)
	
	return 0;
}

运行结果:

运算符优先级与结合性

当一个表达式中包含多个不同优先级的运算符时,编译器会按照规定的顺序进行计算。一般来说:

  1. 括号()具有最高优先级。
  2. 单目运算符(如!, ++, --)优先级较高。
  3. 算术运算符中,乘除取余高于加减。
  4. 关系运算符高于逻辑运算符。
  5. 赋值运算符优先级最低。

结合性决定了相同优先级运算符的执行方向。大多数从左到右(如加减乘除),但赋值和单目运算符通常从右到左。

运算关系的类型转换

在进行混合类型的运算时,C语言会自动进行隐式类型转换,以保证精度不丢失。基本原则是:

低精度(占用字节少/值域小)向高精度(占用字节多/值域大)转换。常见的等级顺序为:

// 大致转换路径示例
// int -> long -> float -> double
// char -> int 

这意味着如果在一个表达式中既有int又有double,int会被临时转换为double后再参与计算,最终结果也是double类型。了解这一机制能有效避免数据截断导致的计算错误。

以上就是C语言运算符深入探究优先级、结合性及种类的详细内容,更多关于C语言基础语法的资料请关注本站其它相关文章!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表