C语言条件运算符

条件运算符是由符号 “?”和 “:” 组合而成的。条件运算符有三个运算对象,三个运算对象都表达式。第一个运算对象可以是任何类型的表达式,如算术表达式、关系表达式、赋值表达式和逻辑表达式等,后面两个表达式是类型相同的任何表达式。条件运算符的表达方式、结合方向、功能如表所示:

C语言条件运算符
总结如下:

  • 在程序设计中,条件运算符可以用于程序的判断和选择。可以用条件运算符非常简单地计算出两个变量中比较大或比较小的那个值。例如:
            a>=b?a:b
    

    上面的式子表示求两个变量中数值比较大的那个变量。如果a>=b为真,表示a是两个数中比较大的,结果就是a;如果a>=b为假,表示b是两个数中比较大的,结果就是b。

  • 条件运算符的结合方向是自右向左。当一个式子中出现多个条件运算符时,应该将位于最右边的问号与离它最近的冒号配对,并按这一原则正确区分各条件运算符的运算对象。例如:

            w<x ? x+w : x<y ? x : y
    

    该式子中含有两个条件运算符,根据上述的运算规则,我们很容易得出x<y ? x : y是一个条件运算符构成的整体。因此w<x ? x+w : x<y ? x : yw<x ? x+w :( x<y ? x : y) 等价,而不是与 (w<x ? x+w : x<y) ? x : y等价。
    条件运算符的优先级仅仅高于赋值运算符和逗号运算符,低于所有其他运算符,即条件运算符优先于赋值运算符,低于逻辑运算符关系运算符算术运算符,如图所示。

    C语言条件运算符

示例:

        char c='A';
        int a=2,b=3;

表达式一:

        c>='A'&&c<='Z'?a:b

逻辑运算符的优先级高于条件运算符,因此上式等价于(c>='A'&&c<='Z')?a:b

关系运算符的优先级又高于逻辑运算符,因此(c>='A')&&(c<='Z'),由于c='A',所以关系表达式c>='A'为真,c<='Z'也为真,

根据逻辑与(&&)同真为真的运算规则,逻辑表达式(c>='A')&&(c<='Z')结果为真,因此条件运算表达式c>='A'&&c<='Z'?a:b的运算结果为a,即值为2。

表达式二:

        b=3+a>5 ? 100 : 200

因为条件运算符优先于赋值运算符,因此上式等价于b=(3+a>5 ? 100 : 200)

又因为条件运算符优先级低于关系运算符和算术运算符,所以表达式3+a>5 ? 100 :200又等价于(3+a>5) ? 100 : 200

3+a>5等价于3+2>5,即5>5,逻辑值为假,所以条件表达式3+a>5 ? 100 : 200的运算符结果为200,然后将条件表达式的值,赋值给变量b,因此b=200。

赞(0)

评论 抢沙发

评论前必须登录!