gpt4 book ai didi

c - C语言中&和&&的区别?

转载 作者:太空狗 更新时间:2023-10-29 15:49:58 25 4
gpt4 key购买 nike

C语言中&&&有什么区别?

我的老师给我举了这个例子:

int a = 8;
int b = 4;
printf("a & b = %d\n", a & b);
printf("a && b = %d\n", a && b);

输出:

a & b = 0;
a && b = 1;

我不确定为什么这会在一种情况下返回 true 而在另一种情况下返回 false。

最佳答案

&按位与&&逻辑和

表达式x && y将返回 1如果两个xy是非零的,并且 0否则。请注意,如果 x为零,则 y根本不会评价。如果y,这将很重要是一个有副作用的表达式。这种行为称为短路

表达式x & y将对 x 中的每个单独位执行按位运算和 y .所以如果x1010二进制和y1100然后x & y将评估为 1000 .注意 x & y 的返回值不应被解释为 bool 值,即使可能。在早期的 C 中,运算符 &&不存在,因此&用于此目的。

解释它的一种方法是,您可以想象 &与应用 && 是一样的在操作数中的每个单独的位上。

另请注意 &优先级低于 && ,尽管直觉告诉我们应该反过来。这也适用于比较运算符,例如 < , <= , == , != , >= , > .这可以追溯到 C 没有运算符 && 的时候和 ||并且使用了按位版本。这个时候是有道理的,但是加上了逻辑运算符就没有了。 Kernighan 和 Ritchie 承认这会更有意义,但他们没有修复它,因为这会破坏现有代码。

I'm not sure why this would return true in one scenario and false in another.

x & y 的返回值根本不应该被视为 bool 值。但是,它可以(取决于代码的编写方式)被视为 bool 数组。如果你有两个整数,flags1flags2然后是 flags1 & flags2 的结果将表示在两者 flags1 中切换的标志和 flags2 .

关于c - C语言中&和&&的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49617159/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com