前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >谈谈C语言中的逻辑运算符

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

作者头像
编程小顺
发布2021-10-13 10:34:31
1.4K0
发布2021-10-13 10:34:31
举报
文章被收录于专栏:知识小木屋

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

关系逻辑运算符

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

运算符

解释

例子

&&

逻辑与运算符。如果两个操作数都非零,则条件为真

(A && B)为假

||

逻辑或运算符。如果两个操作数中有任意一个非零,则条件为真

(A || B)为真

!

逻辑非运算符。用来逆转操作数的逻辑状态。如果条件为真则逻辑非运算符将使其为假

!(A && B)为假

关系运算符实例

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

核心思路:

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

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

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

源代码如下:

代码语言:javascript
复制
#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,将会输出以下结果:

代码语言:javascript
复制
2020是闰年

位运算符

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

p

q

p & q

p | q

p ^ q

0

0

0

0

0

0

1

0

1

1

1

0

0

1

1

1

1

1

1

0

假定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语言支持的所有位运算符号,如下表所示:

运‍算符

解释

例子

&

按位与操作,按二进制位进行“与”运算。运算规则:0&0=0; 0&1=0; 1&0=0; 1&1=1;

A & B将得到13即0000 1101

|

按位或运算符,按二进制位进行“或”运算。运算规则:0|0=0; 0|1=1; 1|0=1; 1|1=1;

A | B将得到47即0010 1111

^

异或运算符,按二进制位进行“异或”运算。运算规则:0^0=0;0^1=1;1^0=1;1^1=0

A ^ B将得到34即0010 0010

~

取反运算符,按二进制位进行“取反”运算。运算规则:~1=0;~0=1;

~A 将得到-46即1101 00102 的补码形式,带符号的二进制数

<<

二进制左移运算符。左操作数的值向左移动右操作数指定的位数(左边的二进制位丢弃,右边补0)

A<<2 将得到16即1011 0100

>>

二进制右移运算符。左操作数的值向右移动右操作数指定的位数(正数左补0,负数左补1,右边丢弃)

A>>2 将得到3即0000 0011

位运算实例

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

代码语言:javascript
复制
#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;
}

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

代码语言:javascript
复制
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
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-03-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 知识小木屋 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档