谈谈C语言中的逻辑运算符

IT知识
333
0
0
2022-11-14

在离散数学中,常常会使用“与”、“或”、“非”等联结词,在集合里,也有“交”、“并”、“补”,同样的在C语言中,也有一些关系逻辑运算符号,例如:“&&”、“||”、“!”。下面,我将详细谈谈C语言中的逻辑运算符。

关系逻辑运算符

假定变量A的值为1,变量B的值为0,下表展示了C语言支持的所有算术运算符。

关系运算符实例

举个栗子:判断某一年是否为闰年

核心思路:

①、能被4整除不能被100整除的是闰年.

②、能被400整除的是闰年.

由上可知条件①和条件②是或者的关系,而在条件①中的两个小条件又是并且的关系。所以条件①和条件②之间用关系运算符“||”,条件①中的两个小条件则用关系运算符“&&”。

源代码如下:

#include <stdio.h>
int main()
{
    int year;
    printf("请输入年份:\n例如 2020\n");
    scanf("%d",&year);
    if ((year%4==0 && year%100!=0) || year%400==0)
    {
        printf("%d是闰年\n",year);
    } else
    {
        printf("%d不是闰年\n",year);
    }
    return 0;
}

运行编译上面的源代码,输入2020,将会输出以下结果:

2020是闰年

位运算符

位运算符作用于位,并逐位执行操作。下面是“&”、“|”、“^”的真值表。

假定A = 45,B = 15,将他们转为二进制数,他们如下所示:

A = 0010 1101

B = 0000 1111

根据真值表,不难得出:

A & B = 0000 1101

A | B = 0010 1111

A ^ B = 0010 0010

~A = 1101 0010

(2 的补码形式,带符号的二进制数)

~B = 1111 0000

(2 的补码形式,带符号的二进制数)

温馨提示:“^”是异或运算符,如果a、b两个值不相同,则异或结果为1。如果a、b两个值相同,异或结果为0。

拓展小知识

原码、反码和补码的两个小结论:

①对于正数,反码 = 补码 = 原码

②对于负数,反码 = 除符号以外的各位取反;补码 = 反码 + 1

总结一下

还是假定A = 45,B = 15,将他们转为二进制数为 A = 0010 1101,B = 0000 1111 C语言支持的所有位运算符号,如下表所示:

下面的实例展示了C 语言中所有可用的位运算符,源代码如下:

#include <stdio.h>
int main()
{
    int a = 45,b = 15;
    printf("a & b = %d\n",a&b);
    printf("a | b = %d\n",a|b);
    printf("a ^ b = %d\n",a^b);
    printf("~a = %d\n",~a);
    printf("~b = %d\n",~b);
    printf("a << 2 = %d\n",a<<2);
    printf("b << 2 = %d\n",b<<2);
    printf("a >> 2 = %d\n",a>>2);
    printf("b >> 2 = %d\n",b>>2);
    return 0;
}

运行编译上面的源代码,将会输出以下结果:

a & b = 13
a | b = 47
a ^ b = 34
~a = -46
~b = -16
a << 2 = 180
b << 2 = 60
a >> 2 = 11
b >> 2 = 3