[编程开发] c语言中&&和||还有&分别是什么意思?

[复制链接]
疯狂de少年 发表于 2023-11-8 21:20:58|来自:中国 | 显示全部楼层 |阅读模式
c语言中&&和||还有&分别是什么意思?
全部回复5 显示全部楼层
yw2008 发表于 2023-11-8 21:21:27|来自:中国 | 显示全部楼层
1、&&和||属于逻辑运算符。关于&&和||的表达式的运算规则是这样的:
表达式1 || 表达式2,只要任意表达式为true,则整个表达式的运算结果为true。


表达式1 && 表达式2,只有所有表达式都为true,则整个表达式的运算结果才为true。根据集合的补集的思想,只要任意表达式为false,则整个表达式的运算结果为false。



2、&&和||的短路运算,是指如果在进行前面的表达式的运算过程,通过判断已经明确的知道整个表达式的结果,那么就不会进行后面表达式的运算判断。例如:
表达式1 || 表达式2 || 表达式3...|| 表达式n,如果表达式1的运算结果为true,则整个表达式的结果为true,同时不会再对后面的表达式2、表达式3到表达式n进行运算判断。如果表达式1的运算结果为false,则根据表达式2的运算结果继续判断。
表达式1 && 表达式2 && 表达式3...&& 表达式n,如果表达式1的运算结果为false,则整个表达式的结果为false,同时不会再对后面的表达式2、表达式3到表达式n进行运算判断。如果表达式1的运算结果为true,则根据表达式2的运算结果继续判断。
buyilang77 发表于 2023-11-8 21:21:42|来自:中国 | 显示全部楼层
“&&”(逻辑与)是逻辑运算符。
“逻辑与”相当于生活中说的“并且”,就是两个条件都同时成立的情况下“逻辑与”的运算结果才为“真”。
“&”是位运算符。
丰鹰 发表于 2023-11-8 21:21:48|来自:中国 | 显示全部楼层
&& 是逻辑与。 || 是逻辑或。 & 是按位与。还有一个你没提到的, | 是按位或。
既然将四者并列,那我们就先只考虑布尔值的情况,也就是只有 true(1) 或者 false(0) 表示是或否。比如 1 < 2 我们得到结果为 true , 1 > 2 我们得到 false 。
先看“与”和“或”,这两个理解起来应该没什么困难吧?“与”就是“并且”的意思,比如现在有一个数字 a ,
a < 1 && a > 0
就是表示 a 在 0 和 1 之间;
a > 1 || a < 0
就表示 a 比一大,或者 a 比零更小。
那么“按位”和“逻辑”有什么区别呢?首先是概念不一样,一个是针对位进行的运算,一个是逻辑上的运算。
至于实际效果上的区别,我们来看一下:
假如现在 a 是 2 ,a > 1 | a < 0 是这样运算的:首先计算 a > 1 ,是 true ,下一步计算 a < 0 ,是 false ,接下来计算 true | false ,得到 true 。
而如果运算 a > 1 || a < 0 ,第一步计算 a > 1 ,是 true 。OK,不用再计算下去了,后面无论是 true 或者 false 都不重要,整个式子的值总是 true 的。这种情况下,使用逻辑与、逻辑或,将会少进行一次运算。如果右侧的运算有其他副作用,比如进行计数之类的操作,就可以发现这个现象。
<hr/>前面我们考虑的是布尔值,而 & 和 | 还可以用在整数上,并且是一位一位对应着进行计算,也是为什么叫它们“按位”。
在每一位上的运算规则和布尔是一样的,比如 0b1010 & 0b0011 ( 0b 开头表示二进制),会得到 0b0010 ,而 0b1010 | 0b0011 得到 0b1011 。
而 && 和 || 理论上不应该用在整数上,只是有些语言确实允许,其产生的结果多和 & 和 | 不同。这个可以自己尝试,不建议在实际项目中这样使用。
<hr/>二〇二二年看到个问题,回来补一补:
&&-||能完全代替所有可以使用if-else的情况吗?看这个问题下的回答就能知道,在某些情况下是不能代替的。但相比于不能代替,更重要的是两者表意不同,就如三目运算符也不能代替 if-else 一般:
c++中“?:”是什么意思?
暖月 发表于 2023-11-8 21:21:53|来自:中国 | 显示全部楼层
两个的是逻辑运算符,单个的是位运算符。推荐查一下基础的C语言课本。
dudelee 发表于 2023-11-8 21:22:28|来自:中国 | 显示全部楼层
就讲一下&&和&的区别吧,我记得知乎上应该是有类似问题的。
&&是"逻辑与",&是"位与"。
"逻辑与"关注的是符号两边数的真值。(C语言中可以这样看:0是false,0以外的值都为true)
而"位与"是将符号两边的数按二进制位一个一个地进行"与运算"后计算出来的结果。
再举个例子,6&&1 和 6&1 的区别:
6&&1 = true(因为符号两边都为true,所以结果为true)
6&1 = 0(6的二进制为110,与001相与的结果就是0)

快速回帖

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则