Administrator
Administrator
发布于 2024-10-03 / 7 阅读
0
0

运算符


1. 运算符概述

运算符是用于执行各种操作的符号或关键字,例如算术计算、比较和逻辑判断等。在C语言中,运算符可以分为以下几类:

  • 算术运算符
  • 关系运算符
  • 逻辑运算符
  • 位运算符
  • 赋值运算符
  • 其他运算符(如条件运算符、逗号运算符等)

本次我们重点学习前四种运算符。


2. 算术运算符

算术运算符用于执行基本的数学运算。

运算符 描述
+ 加法
- 减法
* 乘法
/ 除法
% 取模(求余)
++ 自增(加1)
-- 自减(减1)

2.1 示例代码

#include <stdio.h>

int main() {
    int a = 10, b = 3;
    int sum, diff, prod, quot, rem;

    sum = a + b;       // 加法
    diff = a - b;      // 减法
    prod = a * b;      // 乘法
    quot = a / b;      // 除法
    rem = a % b;       // 取模(求余)

    printf("a + b = %d\n", sum);
    printf("a - b = %d\n", diff);
    printf("a * b = %d\n", prod);
    printf("a / b = %d\n", quot);
    printf("a %% b = %d\n", rem);  // 注意:输出百分号需要使用%%

    a++;  // 自增
    b--;  // 自减

    printf("a 自增后 = %d\n", a);
    printf("b 自减后 = %d\n", b);

    return 0;
}

输出结果:

a + b = 13
a - b = 7
a * b = 30
a / b = 3
a % b = 1
a 自增后 = 11
b 自减后 = 2

3. 关系运算符

关系运算符用于比较两个值,结果为布尔值(在C语言中,0表示假,非0表示真)。

运算符 描述
== 等于
!= 不等于
> 大于
< 小于
>= 大于等于
<= 小于等于

3.1 示例代码

#include <stdio.h>

int main() {
    int x = 5, y = 10;

    printf("x == y 的结果是 %d\n", x == y);
    printf("x != y 的结果是 %d\n", x != y);
    printf("x > y 的结果是 %d\n", x > y);
    printf("x < y 的结果是 %d\n", x < y);
    printf("x >= y 的结果是 %d\n", x >= y);
    printf("x <= y 的结果是 %d\n", x <= y);

    return 0;
}

输出结果:

x == y 的结果是 0
x != y 的结果是 1
x > y 的结果是 0
x < y 的结果是 1
x >= y 的结果是 0
x <= y 的结果是 1

4. 逻辑运算符

逻辑运算符用于进行布尔逻辑运算,操作数通常为关系表达式或布尔值。

运算符 描述
&& 逻辑与(AND)
`
! 逻辑非(NOT)

4.1 示例代码

#include <stdio.h>

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

    // 逻辑与
    if (a > 0 && b > 0) {
        printf("a 和 b 都是正数。\n");
    }

    // 逻辑或
    if (a > 0 || b < 0) {
        printf("a 是正数或者 b 是负数。\n");
    }

    // 逻辑非
    if (!(a > b)) {
        printf("a 不大于 b。\n");
    }

    return 0;
}

输出结果:

a 和 b 都是正数。
a 是正数或者 b 是负数。
a 不大于 b。

5. 位运算符

位运算符用于按位操作整数类型数据,直接操作二进制位。

运算符 描述
& 按位与(AND)
` `
^ 按位异或(XOR)
~ 按位取反(NOT)
<< 左移
>> 右移

5.1 示例代码

#include <stdio.h>

int main() {
    unsigned char a = 60;   // 60 = 0011 1100
    unsigned char b = 13;   // 13 = 0000 1101
    unsigned char result = 0;

    // 按位与
    result = a & b;         // 0000 1100 = 12
    printf("a & b = %d\n", result);

    // 按位或
    result = a | b;         // 0011 1101 = 61
    printf("a | b = %d\n", result);

    // 按位异或
    result = a ^ b;         // 0011 0001 = 49
    printf("a ^ b = %d\n", result);

    // 按位取反
    result = ~a;            // 1100 0011 = 195
    printf("~a = %d\n", result);

    // 左移
    result = a << 2;        // 1111 0000 = 240
    printf("a << 2 = %d\n", result);

    // 右移
    result = a >> 2;        // 0000 1111 = 15
    printf("a >> 2 = %d\n", result);

    return 0;
}

输出结果:

a & b = 12
a | b = 61
a ^ b = 49
~a = 195
a << 2 = 240
a >> 2 = 15

6. 总结

  • 算术运算符用于基本数学计算,如加减乘除和取模。
  • 关系运算符用于比较两个值,结果为真(非零)或假(零)。
  • 逻辑运算符用于进行布尔逻辑运算,常用于条件判断。
  • 位运算符直接操作二进制位,常用于底层编程和性能优化。

7. 注意事项

  • 整数除法:当两个整数相除时,结果仍为整数,小数部分会被舍弃。
  • 自增自减运算符++--可以作为前缀或后缀,++ii++在单独语句中效果相同,但在表达式中有区别。
  • 逻辑运算符的短路特性:在使用&&||时,如果左侧表达式已经确定了结果,右侧表达式将不会被计算。
  • 位运算符的优先级:在复杂表达式中,建议使用括号来明确运算顺序。


评论