嵌入式C:运算符的概念及分类

1、运算符的概念

在C语言中,运算符是用来执行各种操作的符号。它们用于对一个或多个操作数进行操作,并生成结果。以下是一些常见的运算符的概念:

运算符是告诉编译程序执行特定算术或逻辑操作的符号。

运算符用来连接两个操作数。

运算符的本质:运算符是一个符号。

2、算术运算符 

算术运算符用于执行基本的数学运算,如加法、减法、乘法和除法。

例如,+ 用于相加,- 用于相减,* 用于相乘,/ 用于相除。

#include <stdio.h>
int main()
{
    int a = 10;
    int b = 5;
    int c;

    c = a + b;  // 加法运算
    printf("c = %d\n", c);  // 输出结果:c = 15

    c = a - b;  // 减法运算
    printf("c = %d\n", c);  // 输出结果:c = 5

    c = a * b;  // 乘法运算
    printf("c = %d\n", c);  // 输出结果:c = 50

    c = a / b;  // 除法运算
    printf("c = %d\n", c);  // 输出结果:c = 2

    c = a % b;  // 取模运算
    printf("c = %d\n", c);  // 输出结果:c = 0

    return 0;
}

运行结果: 

3、关系运算符 

 关系运算符用于比较两个操作数之间的关系,并返回一个布尔值(真或假)作为结果。

例如,== 用于检查两个操作数是否相等,> 用于检查左操作数是否大于右操作数,<= 用于检查左操作数是否小于等于右操作数等。

#include <stdio.h>
int main()
{
    int a = 5;
    int b = 3;
    int result;

    result = (a == b);  // 等于运算
    printf("result = %d\n", result);  // 输出结果:result = 0 (假)

    result = (a > b);  // 大于运算
    printf("result = %d\n", result);  // 输出结果:result = 1 (真)

    result = (a <= b);  // 小于等于运算
    printf("result = %d\n", result);  // 输出结果:result = 0 (假)

    return 0;
}

运行结果:

4、逻辑运算符

逻辑运算符用于组合和操作布尔值(真或假)。

例如,&& 用于逻辑与操作,|| 用于逻辑或操作,! 用于逻辑非操作。

逻辑与运算符 (&&):
逻辑与运算符 (&&) 在两个操作数都为真时返回真,否则返回假。它的工作原理如下:

        如果第一个操作数为假,则整个表达式的结果为假,不再计算第二个操作数。

        只有当第一个操作数为真时,才会计算并返回第二个操作数的值。

例如,对于表达式 (a > b) && (c > b)

  • 如果 a 大于 b 并且 c 大于 b,则整个表达式的结果为真。
  • 如果 a 不大于 b,则整个表达式的结果为假,不会计算 c < b
#include <stdio.h>
int main()
{
    int a = 5;
    int b = 3;
    int c = 7;
    int result;

    result = (a > b) && (c > b);  // a大于b并且c大于b
    // 如果a大于b并且c大于b,result为真,即1
    printf("result = %d\n", result);  // 输出结果:result = 1

    result = (a > b) && (c < b);  // a大于b并且c小于b
    // 如果a大于b但c小于b,result为假,即0
    printf("result = %d\n", result);  // 输出结果:result = 0

    return 0;
}

 运行结果:

 逻辑或运算符 (||):

逻辑或运算符 (||) 在两个操作数中至少有一个为真时返回真,否则返回假。它的工作原理如下:

        如果第一个操作数为真,则整个表达式的结果为真,不再计算第二个操作数。

        只有当第一个操作数为假时,才会计算并返回第二个操作数的值。

例如,对于表达式 (a > b) || (c > b)

  • 如果 a 大于 b,则整个表达式的结果为真,不会计算 c > b
  • 如果 a 不大于 b 并且 c 大于 b,则整个表达式的结果为真。

#include <stdio.h>
int main()
{
    int a = 5;
    int b = 3;
    int c = 7;
    int result;

    result = (a > b) || (c > b);  // a大于b或者c大于b
    // 如果a大于b或者c大于b,result为真,即1
    printf("result = %d\n", result);  // 输出结果:result = 1

    result = (a < b) || (c < b);  // a小于b或者c小于b
    // 如果a小于b并且c小于b,result为假,即0
    printf("result = %d\n", result);  // 输出结果:result = 0

    return 0;
}

运行结果:

 逻辑非运算符 (!):

        逻辑非运算符 (!) 用于取反操作数的值。如果操作数为真,则返回假;如果操作数为假,则返回真。

例如,对于表达式 !(a > b)

  • 如果 a 大于 b,则取反后的结果为假。
  • 如果 a 不大于 b,则取反后的结果为真。
#include <stdio.h>
int main()
{
    int a = 5;
    int b = 3;
    int result;

    result = !(a > b);  // a不大于b
    // 如果a不大于b,取反后的结果为假,即0
    printf("result = %d\n", result);  // 输出结果:result = 0

    result = !(a < b);  // a不小于b
    // 如果a不小于b,取反后的结果为真,即1
    printf("result = %d\n", result);  // 输出结果:result = 1

    return 0;
}

 运行结果:

逻辑运算符在条件语句、循环控制和布尔逻辑中非常有用。它们允许我们根据不同的条件来执行不同的操作。理解逻辑运算符的原理可以帮助我们编写更复杂和灵活的程序逻辑。

 5、赋值运算符

赋值运算符用于将一个值赋给变量。

例如,= 用于将右操作数的值赋给左操作数。

#include <stdio.h>
int main()
{
    int a = 5;
    int b;

    b = a;  // 赋值运算
    printf("b = %d\n", b);  // 输出结果:b = 5

    return 0;
}

运行结果:

 6、自增和自减运算符

自增运算符和自减运算符用于增加或减少变量的值。

例如,++ 用于将变量的值增加1,-- 用于将变量的值减少1。

#include <stdio.h>
int main()
{
    int a = 5;

    a++;  // 自增运算
    printf("a = %d\n", a);  // 输出结果:a = 6

    a--;  // 自减运算
    printf("a = %d\n", a);  // 输出结果:a = 5

    return 0;
}

运行结果:

注意: 

前缀形式和后缀形式:

        前缀形式:运算符位于操作数之前,例如 ++i 或 --i。在前缀形式中,首先执行自增或自减操作,然后返回新的值。

        后缀形式:运算符位于操作数之后,例如 i++ 或 i--。在后缀形式中,首先返回旧的值,然后执行自增或自减操作。

副作用和优先级:

        自增和自减运算符会对操作数进行修改,因此在使用它们时要注意副作用。特别是在复杂的表达式中,可能会导致意外的结果。

        自增和自减运算符的优先级较高,但是在表达式中仍然要注意运算符的顺序和结合性,以确保得到预期的结果。

在赋值表达式中的使用:

        自增和自减运算符可以与赋值运算符 (+= 和 -=) 结合使用,以简化代码并增加可读性。

        例如,i += 1 等同于 i++i -= 1 等同于 i--

下面是一些示例代码,演示了自增和自减运算符的使用:

#include <stdio.h>
int main()
{
    int i = 5;
    int j;

    j = ++i;  // 前缀形式,先自增i,然后将新值赋给j
    printf("i = %d, j = %d\n", i, j);  // 输出结果:i = 6, j = 6

    j = i++;  // 后缀形式,先将旧值赋给j,然后自增i
    printf("i = %d, j = %d\n", i, j);  // 输出结果:i = 7, j = 6

    j = --i;  // 前缀形式,先自减i,然后将新值赋给j
    printf("i = %d, j = %d\n", i, j);  // 输出结果:i = 6, j = 6

    j = i--;  // 后缀形式,先将旧值赋给j,然后自减i
    printf("i = %d, j = %d\n", i, j);  // 输出结果:i = 5, j = 6

    return 0;
}

运行结果:

7、位运算符:

位运算符用于对二进制位进行操作。

例如,& 用于按位与操作,| 用于按位或操作,^ 用于按位异或操作。

按位与运算符 (&):
按位与运算符 (&) 对两个操作数的对应位进行与操作,如果两个对应位都为 1,则结果为 1,否则为 0。

#include <stdio.h>
int main()
{
    unsigned int a = 5;   // 二进制表示为 0101
    unsigned int b = 3;   // 二进制表示为 0011
    unsigned int result;

    result = a & b;  // 对应位相与
    // 结果为 0001,即 1
    printf("result = %u\n", result);  // 输出结果:result = 1

    return 0;
}

运行结果:

按位或运算符 (|):
按位或运算符 (|) 对两个操作数的对应位进行或操作,如果两个对应位中至少有一个为 1,则结果为 1,否则为 0。例如:

#include <stdio.h>
int main()
{
    unsigned int a = 5;   // 二进制表示为 0101
    unsigned int b = 3;   // 二进制表示为 0011
    unsigned int result;

    result = a | b;  // 对应位相或
    // 结果为 0111,即 7
    printf("result = %u\n", result);  // 输出结果:result = 7

    return 0;
}

运行结果:

按位异或运算符 (^):
按位异或运算符 (^) 对两个操作数的对应位进行异或操作,如果两个对应位不相同,则结果为 1,否则为 0。例如:

#include <stdio.h>
int main()
{
    unsigned int a = 5;   // 二进制表示为 0101
    unsigned int b = 3;   // 二进制表示为 0011
    unsigned int result;

    result = a ^ b;  // 对应位异或
    // 结果为 0110,即 6
    printf("result = %u\n", result);  // 输出结果:result = 6

    return 0;
}

运行结果:

8 、条件运算符

条件运算符(也称为三元运算符)根据条件的真假选择不同的操作数。

例如,条件 ? 表达式1 : 表达式2,如果条件为真,则返回表达式1的值;否则返回表达式2的值。

#include <stdio.h>
int main()
{
    int a = 5;
    int b = 3;
    int max;

    max = (a > b) ? a : b;
    // 如果a大于b,max的值为a;否则max的值为b
    printf("max = %d\n", max);  // 输出结果:max = 5

    return 0;
}

运行结果:

在这个示例中,我们比较了变量a和b的值。如果a大于b,条件为真,那么max的值将被赋为a的值;否则,条件为假,max的值将被赋为b的值。在这种情况下,由于a的值为5,大于b的值3,所以max的值为5。

条件运算符在需要根据条件选择不同操作数的场景中非常有用。它提供了一种简洁的方式来实现条件选择。

这些是C语言中的一些常见运算符的概念。每个运算符都有其特定的语法和行为,可以根据需要使用不同的运算符来执行特定的操作。

  • 13
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值