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
只需要非零就可以计算为真。嘿,不能对你的答案进行投票,但感谢大家的澄清!很高兴知道我正确地理解了那件事,哈哈。