逻辑类型和运算
Suzhou 708 0

逻辑类型

布尔类型 C语言中原本没有布尔类型,如if语句中判断a > b,结果可能为1或0(整数),即判断if语句是否执行。 C语言后来支持了布尔类型,出现了新类型bool。 bool类型需要包含头文件#include<stdbool.h>才能使用bool中的true和false。 ::: tip #include<stdbool.h>需要跟在#include<stdio.h>后。 :::


逻辑运算

逻辑运算是对结果量进行的运算,结果只有0和1。 逻辑量是关系运算或逻辑运算的结果。 逻辑运算的结果用来做逻辑运算。 逻辑类型和运算 示例1:表达x∈(4,6)时,不可以使用4<x<6,原因是C会先计算4<x,再判断(4<x)<6。:4<x的结果是一个逻辑值,即:在4<x中,无论x和4的大小关系,4<x的运算结果都是1或0。(4<x)<6的判断结果都是成立。 x∈(4,6)用C可以正确理解的方式表达应该是x>4 && x<6 。 示例2:判断字母c是否为大写字母时,使用c>'A' && c<'Z'。 示例3:!age<20。逻辑运算符的优先级普遍低于比较运算符;单目运算符的优先级高于双目运算符。即:先判断!age,age如果为0,!age的结果就为1,如果age不为0,!age的结果就是1。正常判断!age<20的写法应为!(age<20)。 ::: tip 逻辑运算符优先级: ! > && > || ::: 逻辑类型和运算 ::: tip 逻辑运算是自左向右进行的,如果左边的结果已经能够决定结果,就不会再做右边的计算。 短路:对于&&来说,左边结果为false时不再做右边;对于||来说,左边为true时不再做右边。 :::

#include <stdio.h>

int main()
{
    int a = -1;
    if( a > 0 && a++ > 1 ) {
        printf("OK\n");
    }
    printf("%d\n",a);
    return 0;
 } 
-1
Process exited after 0.02138 seconds with return value 0

如上程序,在判断a > 0不成立时,就不会执行a++ > 1了。 ::: warning 避免将赋值、复合赋值组合进表达式。 :::


条件和逗号运算

条件运算符

count = (count > 20) ? count - 10 : count + 10 ;

上式中共有“?”和“:”两个符号。“?”前为条件,“?”后面是条件满足时候的值,“:”后面是条件不满足时候的值。 可以翻译为:如果xxxx的话,结果为xxx,否则为xxx。 类似于如下程序:

 if(count > 20)
     count = count - 10;
else
    count = count + 10;

::: tip 条件运算符的优先级高于赋值运算符,但是低于其他所有的运算符。 ::: 嵌套条件表达式 逻辑类型和运算 ::: warning 条件运算符是自右向左结合的。 考虑到复杂程度可可读性,要尽量避免使用嵌套条件表达式。 ::: 逗号运算

逗号在C语言中是一个运算符,用来连接两个表达式,并且以右边的表达式的值作为结果。 ::: tip 逗号运算的优先级是所有运算符中最低的,低过赋值运算。 :::

#include <stdio.h>

int main()
{
    int i = 0;
    i = 2+4,3+5;
    printf("%d",i);
    return 0;
}
6
Process exited after 0.01521 seconds with return value 0

在上述程序的执行过程中。可能会有如下提示: 逻辑类型和运算 提示表达式3+5的结果没有被用到,原因是2+4的值赋给i,赋值的优先级大于逗号,i = 6后3+5的值没有赋给任何值。 如果在2+4,3+5的外面加上括号:

#include <stdio.h>

int main()
{
    int i = 0;
    i = (2+4,3+5);
    printf("%d",i);
    return 0;
}
8
Process exited after 0.01504 seconds with return value 0

结果可能仍然提示表达式未被使用,但是是表达式2+4未被使用,原因是括号内是一个逗号表达式,以逗号右边的表达式的值作为结果,赋值给i。 ::: tip 逗号表达式在for语句中使用,如下:

for (i = 1 , j = 10 ; i < j ; i++ , j--);

括号内被分号分成三部分,每一部分是一个表达式,如果一个表达式中需要有多个计算的时候,就可以使用逗号运算。 :::

评论区

索引目录