Tag: 运算符优先

为什么降低优先级运算符首先执行?

可能重复: 运算符优先级问题 我们知道前缀的优先级大于“LOGICAL AND”( && ),“LOGICAL AND”的优先级大于“LOGICAL OR”( || )。 以下程序似乎违反了它: int main() { int i=-3,j=2,k=0,m; m=++i||++j&&++k; printf(“%d %d %d %d”,i,j,k,m); return 0; } 如果++优先级大于&&和|| 然后所有前缀应首先执行。 在此之后i=-2,j=3,k=1然后&&将首先执行。 为什么输出显示: -2 2 0 1 ? 该程序的行为在ubuntu v12.04上也是相同的。

运算符优先级和三元运算符

我在C有问题 #include int main() { int a = 10, b = 0, c = 7; if (a ? b : c == 0) printf(“1”); else if (c = c || a && b) printf(“2”); return 0; } 这段代码打印2,但我认为?b:c返回b = 0和0 == 0返回1.你能解释一下代码吗?

用C语言中的++运算符对语句进行短路评估

我在Windows 7上的Code :: Blocks 10.05中执行了以下代码。 int a=0,b=0,c; c=a++&&b++; printf(“\na=%d\nb=%d\nc=%d\n\n”,a,b,c); 我获得的输出如下, a=1 b=0 c=0 由于短路评估,这非常有意义。 表达式a++是后递增, 0是返回逻辑和( && )。 因此,不评估部分b++因为0 && 0和0 && 1计算为0 。 但这引起了我的怀疑。 运算符的优先级值清楚地表明++具有比&&更高的优先级。 所以我的理解是这样的,对a++和b ++都进行了评估,然后&&只检查表达式a++的结果来做出决定。 但这并没有发生只有这里评估a++ 。 这种行为的原因是什么? &&作为序列点是否与此行为有关? 如果是这样,为什么我们说&&优先级低于++ ?