为什么 k 没有递增,而 i 和 j 在同一个表达式中递增。我还想知道程序的输出是什么。我得到的输出为 -2 3 1 0
#include <stdio.h>
void main()
{
int i=-3, j=2, m, k=0;
m=++i && ++j || ++k;
printf("%d %d %d %d", i, j, m, k);
}
为什么 k 没有递增,而 i 和 j 在同一个表达式中递增。我还想知道程序的输出是什么。我得到的输出为 -2 3 1 0
#include <stdio.h>
void main()
{
int i=-3, j=2, m, k=0;
m=++i && ++j || ++k;
printf("%d %d %d %d", i, j, m, k);
}
逻辑或、||
短路和之后
++i && ++j
整个表达式的值是确定的,因此||
不会计算 的右操作数。
m=++i && ++j || ++k;
带括号是m = (++i && ++j) || ++k;
因为 的&&
优先级高于||
。
逻辑运算符的短路意味着仅在左侧的评估尚未确定最终结果||
时才评估右侧操作数,因为这意味着仅当左侧评估为 0 时才评估右侧操作数,并且对于&&
,仅当左操作数被评估为非零值时才评估右操作数。
所以首先++i && ++j
被评估,为此,首先++i
被评估。i
之前有值-3
,因此++i
计算为-2
,它不是 0,因此++j
也计算了 。j
具有之前的值2
,因此++j
计算结果为3
,它再次为非零,因此++i && ++j
计算结果为 1(真)。由于 的左操作数||
不为零,其结果已经确定(为 1),并且右操作数未计算,因此k
保持不变并m
设置为 1。
如果条件左侧的项目||
评估为真,则评估右侧没有意义,因为 OR 条件已经满足。这就是为什么++k
没有被评估
这些运算符被称为短路运算符。因此,如果表达式++i && ++j
为真,它不会计算k
(我们知道表达式的值,而不管 的值如何k
)。
它与订单优先级有关。每当执行逻辑 OR 时,如果第一个操作数为真(在本例中为 j),它将停止。
逻辑运算符的||
工作方式如下:如果第一个条件为真,则不评估第二个条件。
所以首先(++i && ++j)
检查。它返回 true,因此在它||
不被评估之后。因此,k的值没有增加。
#include<stdio.h>
int add(int);
void main()
{
int i=3,k,l;
clrscr();
k= add(++i);
l=add(i++);
printf("i=%d k= %d l=%d",i,k,l);
getch();
}
int add(int ii)
{
++ii;
return(ii);
}
/*th eoutput is
5
5
5 can anyone expalin how? */
#include“stdio.h”
#include“conio.h”
主要的()
{
int rmv=10,vivek=10;
clrscr();
rmv++;//本帖增量表示下一步增量10+1
//rmv+1 和 rmv++ 都一样
printf("1.rmv++=%d\n",rmv);//值为10
printf("2.rmv++=%d\n",rmv++);//值为增量11
++vivek;//这个预加的意思是先加值所以,1+10=11
printf("1.\t++vivek=%d\n",vivek);////++vivek 和 1+vivek 都是一样的
printf("2.\t ++vivek=%d",++vivek");
getch();
}