C语言—运算符

文章目录

  • 1 自增自减
  • 2 关系运算符
  • 3 逻辑运算符
  • 4 条件运算符
  • 5 逗号运算符
  • 6 位运算符

1 自增自减

自增(++)自减(–)有两种形式,以自增为例

  • ++i
    先将i的值加1,然后用新的值参与运算。
  • i++
    i先用原值参与运算,然后再加1。

看上面的介绍,对于自增和自减很好理解,符号在前和符号在后也很好理解。但是当碰到printf时,事情就变得有趣起来。我们首先看一个例子

#include

int main()
{
    int i = 1;
    
    printf("%d,%d,%d",i,i++,++i);

    return 0;   
}

输出结果为

3,2,3

下面来看一下为什么。printf是从右往左计算,从左往右输出。就是说函数printf从右到左压栈,然后将先读取到的放到栈底,最后读取到的放到栈顶,输出时候从栈顶开始

如此来看上面的计算过程,从右往左开始处理,先处理++i,++i是先计算后使用,也就是i先加1,变成2,但是暂时不使用。再往后处理i++,先使用,后计算。就是说先将i=2输出,然后再加1,此时i=3,这时计算完成,++i开始使用i的值,输出为3。最终i值为3,所以i的输出为3。printf输出的时候是从左往右,因此输出结果为3,2,3。

建议在程序设计时不要使用难以理解的表示方法,可以提高程序的可读性和可维护性。

2 关系运算符

常用的关系运算符有,等于(==),小于(<),大于(>),小于等于(<=),大于等于(>=),不等于(!=)。关系运算符的使用比较简单,这里就不再赘述了。

3 逻辑运算符

常用的逻辑运算符有,逻辑与(&&),逻辑或(||)和逻辑非(!)。逻辑运算符的使用也比较简单,这里也不再赘述了。

4 条件运算符

在介绍条件运算符之前,我们先看一小段简单的程序

#include

int main()
{
    int i = 1;
    int j = 10;
    int m = 0;
    
    if (i > j)
    {
        m = i;
    }
    else
    {
        m = j;
    }
    
    printf("%d",m);

    return 0;   
}

输出值为10,很简单。但是我们这么一大段程序,只为了把i和j中最大的值赋值给m,实在有些没必要。C语言中提供了条件运算符供我们使用。条件运算符的基本格式为

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

它的意思是,如果表达式1为真,那么就取表达式2的值,否则取表达式3的值。这样的话可以用一句很简短的程序来实现上面的功能

    m = (i > j) ? i : j;

5 逗号运算符

逗号运算符的基本形式是

(表达式1 , 表达式2 , 表达式3 , …… , 表达式n);

逗号运算符比较简单,它常用于有多个表达式,但是只需要一个表达式的情况。上面的输出值为表达式n的值。

在使用逗号运算符时需要注意,逗号运算符的优先级是最低的。可以看一个例子

#include

int main()
{
    int i = 1;
    int j = 10;
    int m = 0;
    
    m = (i + j , j - i);
    
    printf("%d",m);

    return 0;   
}

输出结果为9

#include

int main()
{
    int i = 1;
    int j = 10;
    int m = 0;
    
    m = i + j , j - i;
    
    printf("%d",m);

    return 0;   
}

输出结果为11。是因为逗号运算符的优先级低于赋值运算符,所以在计算完“i + j”之后就赋值了。

6 位运算符

位运算符要求操作数是整型数。常见的位运算符有六种

运算符 含义 说明
~ 取反 对数据按位取反
& 按位与 对数据按位与,1010 & 0111 = 0010
^ 按位异或 对数据按位异或,1010 ^ 0111 = 1101
<< 左移 按照二进制的形式把所有数字向左移动对应的位数,低位补0
>> 右移 按照二进制的形式把所有数字向右移动对应的位数,低位移出(舍弃),高位的空位补符号位,正数补0,负数补1

除此之外还有按位或“|”,它的作用是对数据按位或,1010 | 0111 = 1111。

你可能感兴趣的:(C语言,c语言,算法)