Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C:运算符和函数结果出现问题_C - Fatal编程技术网

C:运算符和函数结果出现问题

C:运算符和函数结果出现问题,c,C,我是一名正在上第一堂编程课的大学生,在学习过去的一次考试的过程中,我发现了以下问题: 给出打印函数的以下值 #include <stdio.h> int main(){ float x; int a = 5, b = 0; x = a&b ? 2/8.f*5+b++ : a|b printf("%f\n", x); } #包括 int main(){ 浮动x; INTA=5,b=0; x=a&b?2/8.f*5+b++:a | b printf(“%f\n”,x); }

我是一名正在上第一堂编程课的大学生,在学习过去的一次考试的过程中,我发现了以下问题:

给出打印函数的以下值

#include <stdio.h>
int main(){
float x;
int a = 5, b = 0;
x = a&b ? 2/8.f*5+b++ : a|b
printf("%f\n", x);

}
#包括
int main(){
浮动x;
INTA=5,b=0;
x=a&b?2/8.f*5+b++:a | b
printf(“%f\n”,x);
}
运行后,printf显示5.000。把我绊倒的是接线员。据我所知,它的工作原理几乎类似于if,else语句,其中if(condition)为true,那么x,如果不为true,那么y。我不理解函数的流程


这是不是说因为a&b的结果是0,所以它不是真的,因此x=a | b在运算符运行后产生十进制值5?

您的理解完全正确。该运算符称为。在这种情况下,代码将
a&b
计算为
0
或false,这导致它使用
后的值,或
a | b
后的值,即
5
。例如,如果
b
等于
1
,则
a&b
将计算为true,
x
将等于
前面的表达式,该表达式计算为
2.25

是不是因为a&b的结果是0,所以它不是真的,因此x=a | b,在运算符运行后,它会产生十进制值5

是的

表达式解析如下:

(a & b) ? ((2 / 8.f) * 5 + (b++)) : (a | b)
&
是按位AND运算符;它将对两个操作数的每一位执行AND运算。由于
a
是5(
101
),而
b
是0(
000
),因此
a&b
的结果是
101&000==000

由于
a&b
的计算结果为0,因此
后面的表达式不计算;相反,将对
(a | b)
进行评估
|
是按位OR运算符
101 | 000==101
,即5


这就是你的结果

查找“三元运算符”看起来你很好地理解了这一点。挑剔:它实际上被称为条件运算符,是一个三元运算符(C是唯一的一个)。谢谢你的回答!真的很欣赏对方的例子。那么a&b只需要计算一个整数,条件就为真了?或者具体到1?@JohnX:0以外的任何数字在C中都被认为是真的。因此
a&b
只需要非零就可以计算为真。嘿,不能对你的答案进行投票,但感谢大家的澄清!很高兴知道我正确地理解了那件事,哈哈。