当前位置: 首页 > article >正文

7. C语言 运算符详解

本章目录:

    • 前言
    • C语言运算符的分类
      • 1. 算术运算符
      • 2. 关系运算符
      • 3. 逻辑运算符
      • 4. 位运算符
      • 5. 赋值运算符
      • 6. 杂项运算符
    • 运算符优先级


前言

在C语言中,运算符是程序中执行各种操作的核心工具,涉及算术运算、逻辑判断、位操作等多个方面。掌握C语言中的各种运算符对于写出高效、简洁的代码至关重要。本文将对C语言的运算符进行详细解析,包括其分类、常见使用方法及优化技巧。


C语言运算符的分类

C语言中的运算符可以按功能划分为以下几类:

  1. 算术运算符:用于进行数学运算。
  2. 关系运算符:用于比较两个操作数。
  3. 逻辑运算符:用于逻辑判断。
  4. 位运算符:用于处理二进制数据。
  5. 赋值运算符:用于给变量赋值。
  6. 杂项运算符:包括sizeof()、指针操作符、三元运算符等。

1. 算术运算符

算术运算符用于进行基本的数学计算,C语言提供了加、减、乘、除等多种运算。

运算符描述示例
+加法A + B
-减法A - B
*乘法A * B
/除法A / B
%取余A % B
++自增A++
--自减A--

示例:

#include <stdio.h>

int main() {
    int a = 21;
    int b = 10;
    int c;

    c = a + b;
    printf("Line 1: c = %d\n", c);

    c = a - b;
    printf("Line 2: c = %d\n", c);

    c = a * b;
    printf("Line 3: c = %d\n", c);

    c = a / b;
    printf("Line 4: c = %d\n", c);

    c = a % b;
    printf("Line 5: c = %d\n", c);
    
    return 0;
}

输出:

Line 1: c = 31
Line 2: c = 11
Line 3: c = 210
Line 4: c = 2
Line 5: c = 1

2. 关系运算符

关系运算符用于比较两个操作数的大小或相等性,通常用于控制结构(如if语句)中。

运算符描述示例
==等于(A == B)
!=不等于(A != B)
>大于(A > B)
<小于(A < B)
>=大于或等于(A >= B)
<=小于或等于(A <= B)

示例:

#include <stdio.h>

int main() {
    int a = 21, b = 10;

    if (a == b) {
        printf("a equals b\n");
    } else {
        printf("a does not equal b\n");
    }

    return 0;
}

3. 逻辑运算符

逻辑运算符主要用于布尔值运算,在条件表达式中判断多个条件是否成立。

运算符描述示例
&&逻辑与(A && B)
||逻辑或(A || B)
!逻辑非!(A && B)

示例:

#include <stdio.h>

int main() {
    int a = 5, b = 10;
    
    if (a && b) {
        printf("Both a and b are non-zero\n");
    }

    if (a || b) {
        printf("At least one of a or b is non-zero\n");
    }

    return 0;
}

4. 位运算符

位运算符用于操作数字的二进制位,这在一些低级编程、嵌入式开发中非常有用。

运算符描述示例
&按位与A & B
|按位或A | B
^按位异或A ^ B
~按位取反~A
<<左移A << 2
>>右移A >> 2

交换两个数的值:

使用异或运算符^可以不借助临时变量交换两个数的值:

#include <stdio.h>

int main() {
    unsigned int a = 60;  // 0011 1100
    unsigned int b = 13;  // 0000 1101
    
    a = a ^ b;  // a = 0011 0001
    b = a ^ b;  // b = 0011 1100
    a = a ^ b;  // a = 0000 1101
    
    printf("a = %d, b = %d\n", a, b);  // 输出交换后的结果
    return 0;
}

输出:

a = 13, b = 60

5. 赋值运算符

赋值运算符用于将右侧的值赋给左侧的变量。C语言还提供了复合赋值运算符,如+=-=等,简化了某些常见操作。

运算符描述示例
=赋值C = A + B
+=加法赋值C += A
-=减法赋值C -= A
*=乘法赋值C *= A
/=除法赋值C /= A
%=求余赋值C %= A

示例:

#include <stdio.h>

int main() {
    int a = 21, c;
    
    c = a;
    printf("c = %d\n", c);

    c += a;
    printf("c += a: %d\n", c);

    c *= a;
    printf("c *= a: %d\n", c);

    return 0;
}

6. 杂项运算符

C语言中还有一些独特的运算符,像sizeof&*和三元运算符。

运算符描述示例
sizeof获取变量的大小sizeof(a)
&获取变量地址&a
*解引用指针*ptr
?:三元运算符condition ? x : y

示例:

#include <stdio.h>

int main() {
    int a = 10;
    int *ptr = &a;
    
    // sizeof 运算符
    printf("Size of a: %lu\n", sizeof(a));
    
    // 指针操作符
    printf("Address of a: %p\n", (void*)&a);
    printf("Value at ptr: %d\n", *ptr);
    
    // 三元运算符
    int b = (a == 10) ? 20 : 30;
    printf("b = %d\n", b);

    return 0;
}

运算符优先级

运算符优先级决定了表达式中各个操作数计算的顺序。较高优先级的运算符会先执行。

类别运算符结合性
后缀() [] -> . ++ --从左到右
一元+ - ! ~ ++ -- (type) * & sizeof从右到左
乘除* / %从左到右
加减+ -从左到右
移位<< >>从左到右
关系< <= > >=从左到右
相等== !=从左

http://www.kler.cn/a/469102.html

相关文章:

  • 苹果系统MacOS下ObjectC建立的App程序访问opencv加载图片程序
  • 论文解读 | NeurIPS'24 IRCAN:通过识别和重新加权上下文感知神经元来减轻大语言模型生成中的知识冲突...
  • Go Ebiten随机迷宫生成示例
  • QT上实现SVM进行数据分类
  • 【FlutterDart】 listView.builder例子二(14 /100)
  • 深入了解 ES6 Map:用法与实践
  • 【计算机网络安全】CA和安全电子邮件
  • 【前端面试题】前端中的两个外边距bug以及什么是BFC
  • Linux驱动开发:深入理解I2C时序(二)
  • 深入学习 Spring `@PostMapping` 处理表单参数与 JSON 参数
  • PyQt开发界面环境搭建
  • 【FlutterDart】页面切换 PageView PageController(9 /100)
  • 常用的数据结构API概览
  • LeetCode -Hot100 - 73. 矩阵置零
  • 瑞吉外卖项目学习笔记(十)修改套餐、删除套餐、起售和停售套餐
  • 云原生监控与日志管理:确保云原生应用的可靠性与性能
  • Spring MVC和servlet
  • 【2025最新计算机毕业设计】基于SSM的医院挂号住院系统(高质量源码,提供文档,免费部署到本地)【提供源码+答辩PPT+文档+项目部署】
  • 西安电子科技大学初/复试笔试、面试、机试成绩占比
  • 初学stm32 --- RTC实时时钟
  • Pytest钩子函数,测试框架动态切换测试环境
  • 《Rust权威指南》学习笔记(二)
  • Node.js中使用Joi 和 express-joi-validation进行数据验证和校验
  • Win32汇编学习笔记04.重定位与汇编引擎
  • ubuntu 创建服务、查看服务日志
  • Linux-Ubuntu之RTC实时时钟显示