c语言 逻辑运算符(&&)的运算问题

例题:1.
int a=0,b=1,c=0;
if(a&&++b)c++;
printf("%d,%d\n",b,c);
运行结果:0,0.
例题;2.
int a=0,b=1,c=0;
if(a&&b++)c++;
printf("%d,%d\n",b,c);
运行结果:1,0.

我不理解的地方:&&运算符,X&&Y,当X,Y两个都为非0时结果才会为真。
既然这样,回到例题中,a的值既然为0了,0&&(任何值)结果都为0,
那就是说只要系统 一取到a的值为0时,就能得出结果为0了,
后面的++b或b++应该没有必要再去运算,可是为何例题2中,还会去运算b++呢?
两个例题的运行结果都是编入机器后得出来的。

是你搞错了吧,两个程序运行结果应该都是1,0

b++ 并没有执行追问

机器上运行结果就是有运行b++呀。习题的答案也是说明有运行b++

追答

那应该不对。我测试结果是都为 1, 0

追问

真的是这样呢,我换了一个编译器,结果和之前的确实不一样。为什么会这样?

追答

这很正常,不同的编译器可能会产生不同的结果。
按照c语法来说,2个都为1,0应该是正确的。
第一个
int a=0,b=1,c=0;
if(a&&++b)c++; //程序执行到if (a时,就结束了,因为a为false,所以++b不执行,所以b=1,c=0
printf("%d,%d\n",b,c);

第2个同样道理,
int a=0,b=1,c=0;
if(a&&b++)c++;//同1,b++不参与运算
printf("%d,%d\n",b,c);
运行结果:1,0.

温馨提示:内容为网友见解,仅供参考
第1个回答  2013-06-22
你理解对了
都不走自加
所以例题1错了
应该都是1,0
第2个回答  2013-06-22
你的理解没问题啊,第二题的b本来就是1
倒是第一题,输出感觉也应该是1,0才对
第3个回答  2013-06-22
没运算啊亲

C语言逻辑运算符&&和||同时存在时候,不应该先算&&吗?
1. 逻辑运算符的优先级中,`&&` 的优先级高于 `||`。2. 当一个表达式中同时包含 `&&` 和 `||` 时,应先计算 `&&` 运算符。3. 原因在于 `&&` 运算符要求两边的表达式都为真时,整个表达式才为真。4. 如果 `&&` 后面的表达式为假,则整个 `&&` 表达式的结果立即确定为假,不再计算 ...

c语言逻辑运算符 我不明白&&和||到底是怎么运算的
优先级:&&的优先级比||高,所以在写在一起时,先计算&& 再计算||。相同符号时,自左向右计算。4 短路原则:对于&&,如果左操作数a为0,那么结果必然为0,右操作数b将不参与计算。对于||,如果左操作数a非0,那么结果必然为1,右操作数b将不参与计算。

逻辑&&是什么意思?
在C语言中,&&是逻辑与(Logical AND)运算符。当两个操作数都为真(非零)时,该表达式的结果为真(1)。如果其中一个操作数为假(0),则结果为假(0)。逻辑与运算符具有短路特性,即当第一个操作数已经可以确定整个表达式的结果时,就不再计算第二个操作数。换句话说,如果第一个操作数为假...

为什么C语言中&&是逻辑运算符?
c语言中&&是一种双目运算符,表示与运算,而当左边所给表达式或变量为0时,不再计算右侧,整个表达式为零。“&&”表示与,意为同时都要满足,属于逻辑运算符。逻辑运算符总共有3个,分别是"&&"、"||"和"!"。a && b,一假必假,结合性从左至右。||是逻辑或运算符,a || b,一真必真,结...

c语言逻辑运算符 我不明白&&和||到底是怎么运算的
逻辑运算,方式子成立是即为真时整个式子值就为1反之为0,而对于值来说只要不是0就为真,如i&&j&&k=1,i,j=3都为真,所以整个式子为真等于1。另外要注意的是当&&左边为假时不进行右边计算,如(i=0)&&(j=3);l为0假右边j=3不进行运算,所以j还是等于2,手机写的真不方便。

C语言中的逻辑与运算符(&)是什么符号?
C语言中的逻辑与运算符(AND)符号是"&"。在C语言中,逻辑与运算符"&"用于判断两个条件是否同时满足。如果两个操作数都为真(非零),则结果为真(非零),否则结果为假(零)。例如,以下代码将打印"Both true",因为第一个和第二个条件都为真:int a = 1; int b = 2; if (a & b)...

&&在c语言中等于什么
&&在C语言中表示逻辑与运算符。&&表示两个条件都为真时,结果才为真。在C语言中,“&&”是“与”“并且”的意思。它是逻辑运算符,表示逻辑与;就是两个条件都同时成立的情况下,运算结果才为“真”,否则都为“假”。相当于生活中说的“并且”,就是两个条件都同时成立的情况下“逻辑与”的...

&&在c语言中等于什么
c语言中&&是一种双目运算符,表示与运算,而当左边所给表达式或变量为0时,不再计算右侧,整个表达式为零。逻辑运算符是用来判断一件事情是成立还是“不成立”,或者说是“真”还是“假”,判断的结果只有两个值,用数字表示就是“0”和“非0”。其中,“非0”表示该逻辑运算的结果是“真”,“0...

c语言中&&是什么运算
&&是逻辑与(相当于其他语言中的AND)比如: a&&b; 若a和b都为真,则a&&b才为真。否则有一个为假都为假。&是按位与。如果两个相应的二进制数都为1,结果才为1,否则都为0。0&0=0,0&1=0,1&1=1,1&0=0。比如: 3&5=1 00000011(3)00000101(5)00000001(1)...

C语言逻辑运算符&&和||同时存在时候,不应该先算&&吗?
++的优先级最高,所以先算++x,结果x=1,后面的运算符是||,这就意味着不管||后面的运算结果是什么,最后结果都是1,所以尽管&&的优先级高,但也不用计算了,所以最终结果x=1,y=0,z=0 注意一点:优先级与求值顺序无关!

相似回答