逻辑运算如何使用,以及如何混合使用

逻辑运算符,分为与、或、非,三种运算符,其中非是单目运算符,他们在单独使用的时候很好理解

int i = 1;
if( ! i==0 ){
	printf("i 不等于0")
}

这就是非运算,感叹号代表非运算,运算结果取表达式的反值,如上例子,i 等于0返回结果是false,但是取反则为true

int i = 1;
if( i==0 || i==1){
	printf("i 等于0 , 或等于1")
}

其上是或运算,运行时程序从左到右的执行,当有一个表达式满足会立即结束判断,其他的表达式不会经历判断,但如果没有遇到满足的就会一直判断下去,直到所有表达式全部判断完毕

int i = 1;
if( i!=0 && i==1){
	printf("i 不等于0 , 同时等于1")
}

其上是与运算,与运算和或运算一样也是从左到右的判断表达式的结果,但是不同的是,与运算自判断开始时如果遇到结果为true的表达式,不会停下,会一直判断下去,直到所有表达式都为true,或者当遇到一个false时会类似于与运算那样立即停下,不同的是与运算是因为遇到了一个false而整个与运算的结果为false,而或运算则是因为遇到了ture


以上这些是我们常用的三种逻辑运算,但是在逻辑运算中有着几种我们用的机会相当渺茫的逻辑运算符,我们不一定会用到,但是我们要知道,有如下几种

 & 按位与运算,运算双方用各自的二进制表达式,按对应位做与运算,得出结果
 | 按位与运算,运算双方用各自的二进制表达式,按对应位做或运算,得出结果
 ~ 按位取反运算,单目运算符,计算对象将自己的二进制表达式,按位取反,得出结果
 ^ 按位异或运算符,运算双方用各自的二进制表达式,按对应做计算,计算的规则为:双方同为1,或同为0,则该位结果为0,双方一个是0,一个是1,做该位结果为1
 ? : 三目条件运算符,运算时?前的表达式为true,执行:左边的结果,否则执行右边的结果
 
 << 左移位运算符
 >> 右移运算符
左右位移运算符放在一起说,它们的作用就是将计算对象的二进制表达式整体向左或向右移n位,但是,不要盲目的移动,因为该运算有一个超过位舍弃的机制,举一个例子,1二进制是0001,计算表达式1<<1,该表达式结果是2,因为向左移后,0001,变成了0010,但是你如果运行的是1<<10,就会发现,结果变成了0,因为,移动到第十位的时候,有六位被舍弃了,右移动运算是同样的道理
且左右移动运算,其实本质上向左移动时做乘以2的n次方计算,向右移时做的是除以2的n次方计算

不过这些符号我们最多可能也就用一用三目条件运算符了,由于不常用这里只给出解释,具体例子就不给大家列了


这里主要给大家重点说的是,三者在独立使用时,我们都可以理解他是什么意思,但是在混用的时候,很多人都不知道怎么写混用的表达式

说之前,提醒大家一个事情,你要忘记一句话,别人常说非是单目运算符,所以它的运行级别最高,我想告诉你们,如果你想清楚地了解到,混用是什么样的逻辑,那么请你忘记这句话,这句话不知道误导了多少人
当然不是说这句话错了,而是这一句话,不是用来帮助理解如何使用混用表达式的

这里送大家一个混用时的口诀或看一,与看二,单非看整体,下面给大家举个例子解释一下

1 || 2 && !3

我这个例子中的1、2、3分别代表着三个表达式,其中3做的非运算,它的只是一个区反的表达式,而已,并没有最高的执行级别,有很多人之前提到的那句话误导,以为非运算是直接就先得结果了,这个想法是错误的

言归正传,在程序进行判断的时候,从左到右执行,表达式1做的是或运算,所以此时,我们只需要看或运算就可以,不需要考虑右边的其他运算,我们将或运算右面的看做是一个整体的表达式,而不是分开的表达式就可以,此时表达式一,如果为真,那么整个式子就会因为或运算的规则而被停下,如果为假,则会执行右边的判断,在执行右边判断的时候,之前的与运算对于整个表达式的最终结果来说就已经没有任何的意义了,你可以理解为之前的或运算被舍弃了没用了,它不会对结果产生任何影响,而此时会进行与运算,规整也会随之变成与运算的规则,而非运算只不过是与运算中的一个取反的表达式而已

这就是混用的思路方法,其实很简单,记住我说的口诀,以及清楚当前正在生效的是那种逻辑运算规则,同时一定要配合括号,巧妙的使用,不要傻子一样的只会用顺序控制执行结果

  • 6
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值