从零开始的嵌入式生活:c语言运算符

一、关系运算符

关系运算符在使用时,它的的两边都会有一个表达式,比如变量、数值、加减乘除运算等,关系运算符的作用就是判明这两个表达式的大小关系。注意,是判明大小关系,不是其他关系。

C语言提供了以下关系运算符:

关系运算符的两边可以是变量、数据或表达式,例如:

1) a+b > c-d

2) x > 3/2

3)'a'+1 < c (c是变量)

关系运算符也可以嵌套使用,例如:

1)a>(b>c)

2) a != (c==d)

关系运算符的运算结果只有 0 或 1。当条件成立时结果为 1,条件不成立结果为 0。例如:

#include <stdio.h>

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

    printf("结果:%d\n", a>b);

    return 0;
}

 结果:

结果:1

5>0 成立,其值为 1;

34-12>100 不成立,其值为 0;

(a=3)>(b=5) 由于3>5不成立,故其值为 0。

我们将运算结果 1 称为“真”,表示条件成立,将 0 称为“假”,表示条件不成立。

对于含多个关系运算符的表达式,如 k==j==i+5,根据运算符的左结合性,先计算k==j,该式不成立,其值为0,再计算0==i+5,也不成立,故表达式值为0。注意:==才表示等于,而=表示赋值,切勿混淆。

二、算术运算符

 

注意:

减号也是负号,比如 -a 是取变量 a 的相反数。

取模运算要求左右两边操作数必须是整型数据。

自加和自减运算不仅可以对整型操作,也可以对浮点数、指针操作。

前后缀运算:

前缀自加自减运算:先进行自加自减,再参与表达式运算 b = ++i b=--i;

后缀自加自减运算:先参与表达式运算,在进行自加自减 b=i++ b = i--;

取整取余案例:

#include <stdio.h>
int main(void)
{
    int a = 3, b = 2;

    printf("b/a = %d\n", b/a);   //2/3

    printf("b/a = %d\n", b%a);   //2%3

    return 0;
}

输出:

b/a = 0
b/a = 2

 自加自减案例:

#include <stdio.h>
int main(void)
{
    int i = 5,  j = 8;
    int a = 1, b = 7;

    a = i++;   //先赋值再 a = 5 , 这行代码执行后 i = 6
    b = ++j;  //先加j = 9, b = 9
    a++;       //这行代码执行后 a = 6
    ++b;       //这行代码执行后 b = 10

    printf("i = %d\n", ++i);   //先加完再打印后,i = 7(打印值)
    printf("j = %d\n", ++j);   //先加完再打印后,j = 10(打印值)
    printf("a = %d\n", a+1); //6+1
    printf("b = %d\n", b = a++); //b = a(b的值为6) ,执行代码后a = 7

    return 0;
}

输出:

i = 7
j = 10
a = 7
b = 6

三、逻辑运算符

在高中数学中,就学过逻辑运算,例如p为真命题,q为假命题,那么“p且q”为假,“p或q”为真,“非q”为真。在C语言中,也有类似的逻辑运算:

 与运算(&&)

参与运算的两个表达式都为真时,结果才为真,否则为假。

 或运算(||) 

参与运算的两个表达式只要有一个为真,结果就为真;两个表达式都为假时结果才为假。

非运算(!)

参与运算的表达式为真时,结果为假;参与运算的表达式为假时,结果为真。

四、位运算符

位运算符操作的对象是数据中的每一位

位逻辑反:~0110 1111 结果: 1001 0000

位逻辑与:

   1 0 1 1 1 0 0 1

& 0 1 1 1 0 1 0 0

----------------------------

   0 0 1 1 0 0 0 0

位逻辑或:

   1 0 1 1 1 0 0 1

|  0 1 1 1 0 1 0 0

----------------------------

  1 1 1 1 1 1 0 1

位异或运算:相同为0,不同为1

   1 0 1 0 1 1 0 0

^ 0 1 1 0 1 1 1 0

---------------------------

  1 1 0 0 0 0 1 0

移位运算:移出去的不要,空出来的补零。

无符号数左移或者右移需要补0。

负数(补码)右移补1,左移补0。

五、三目运算符

表达式1?表达式2:表达式3

如果表达式1的值为真,则以表达式2 的值作为整个条件表达式的值,否则以表达式3的值作为整个条件表达式的值。

max = (a>b)?a:b;

该语句的语义是:如a>b为真,则把a赋予max,否则把b 赋予max。

注意: 条件运算符的结合方向是自右至左。

例如:

a>b?a:c>d?c:d

应理解为:

a>b?a:(c>d?c:d)

这也就是条件表达式嵌套的情形,即其中的表达式又是一个条件表达式。

六. 特殊运算符

赋值运算符( = ):

不能对数组赋值,不能对常量赋值

可以连续赋值,顺序从右到左

复合赋值符:

加减乘除:

a += n;   等价于 a = a+n;

a -= n;   等价于 a = a-n;

a *= n;   等价于 a = a*n;

a /= n;   等价于 a = a/n;

求余:

a %= n; // 等价于 a = a%n;

 位运算:

a &= n;   等价于 a = a&n;

a |= n;   等价于 a = a|n;

a ^= n;  等价于 a = a^n;

a >>= n;   等价于 a = a>>n;

a <<= n;   等价于 a = a<<n;

除了上述10个复合运算符之外,生造别的复合运算符是非法的

七. 优先级与结合性:

 (话说这玩意真有人记吗?平常不懂就括号,需要就查)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值