中间的位操作符,有什么意思呢?该怎么处理
中间的位操作符,有什么意思呢?
void main( )
{ int a,b,c,y;
a=y=c=0;
++a || ++b && ++c;
printf( "a=%d\t b=%d\t c=%d\n ",a,b,c);
a=b=c=0;
++a && ++b||++c;
printf( "a=%d\t b=%d\t c=%d\n ",a,b,c);
a=b=c=0;
++a && ++b && ++c;
printf( "a=%d\t b=%d\t c=%d\n ",a,b,c);
a=b=c=-1;
++a && ++b && ++c;
printf( "a=%d\t b=%d\t c=%d\n ",a,b,c);
a=b=c=-1;
++a && ++b || ++c;
printf( "a=%d\t b=%d\t c=%d\n ",a,b,c);
a=b=c=-1;
++a || ++b && ++c;
printf( "a=%d\t b=%d\t c=%d\n ",a,b,c);
}
------解决方案--------------------
当然是有意义的.
譬如++a || ++b && ++c; 如果a不是-1的话, ++b 和++c都不会执行的. (&&比||优先)
------解决方案--------------------
中间的不是位操作符,而是逻辑运算符!
------解决方案--------------------
根据适当逻辑条件执行整个语句或者是语句的前面某个部分 。
------解决方案--------------------
void main( )
{ int a,b,c,y;
a=y=c=0; //此处应该是 b, 你 写错了!
++a || ++b && ++c;
printf( "a=%d\t b=%d\t c=%d\n ",a,b,c);
a=b=c=0;
++a && ++b||++c;
printf( "a=%d\t b=%d\t c=%d\n ",a,b,c);
a=b=c=0;
++a && ++b && ++c;
printf( "a=%d\t b=%d\t c=%d\n ",a,b,c);
a=b=c=-1;
++a && ++b && ++c;
printf( "a=%d\t b=%d\t c=%d\n ",a,b,c);
a=b=c=-1;
++a && ++b || ++c;
printf( "a=%d\t b=%d\t c=%d\n ",a,b,c);
a=b=c=-1;
++a || ++b && ++c;
printf( "a=%d\t b=%d\t c=%d\n ",a,b,c);
}
------解决方案--------------------
唉,楼主连位操作符 与 逻辑运算符都还分不清
------解决方案--------------------
int main(int argc, char* argv[])
{
int a,b,c,y;
int i;
a=b=c=0;
i=((++a || ++b) && ++c);
printf( "a=%d b=%d c=%d i=%d\n ",a,b,c,i);
a=b=c=0;
i=(++a || ++b && ++c);
printf( "a=%d b=%d c=%d i=%d\n ",a,b,c,i);
a=b=c=0;
i=(++a || (++b && ++c));
printf( "a=%d b=%d c=%d i=%d\n ",a,b,c,i);
}
a=1 b=0 c=1 i=1
a=1 b=0 c=0 i=1
a=1 b=0 c=0 i=1
事实证明&&的优先级是大于||的
------解决方案--------------------
事实证明&&的优先级是大于||的
拜托:别犯这种无知的错误了。。。
------解决方案--------------------
Generics(网络流浪者) ( ) 信誉:100 Blog 加为好友 2007-4-26 10:32:41 得分: 0
我确实没把话说全. 不过&&确实是优先于||的,
++a || ++b && ++c 等价于 ++a || (++b && ++c), 而不是 (++a || ++b) && ++c,
所以在这种情况下, ++a只要是true, 后面的(++b && ++c)就不会被执行, 这叫做逻辑短路.
==================================================
既然这样的话 ,为什么
a=b=c=0;
++a || ++b && ++c;
printf( "a=%d\t b=%d\t c=%d\n ",a,b,c); 输出的1 0 0 ?
这样解释的话,你输出的 1 0 1 也不对啊。
------解决方案--------------------
void main( )
{ int a,b,c,y;
a=y=c=0;
++a || ++b && ++c;
printf( "a=%d\t b=%d\t c=%d\n ",a,b,c);
a=b=c=0;
++a && ++b||++c;
printf( "a=%d\t b=%d\t c=%d\n ",a,b,c);
a=b=c=0;
++a && ++b && ++c;
printf( "a=%d\t b=%d\t c=%d\n ",a,b,c);
a=b=c=-1;
++a && ++b && ++c;
printf( "a=%d\t b=%d\t c=%d\n ",a,b,c);
a=b=c=-1;
++a && ++b || ++c;
printf( "a=%d\t b=%d\t c=%d\n ",a,b,c);
a=b=c=-1;
++a || ++b && ++c;
printf( "a=%d\t b=%d\t c=%d\n ",a,b,c);
}
------解决方案--------------------
当然是有意义的.
譬如++a || ++b && ++c; 如果a不是-1的话, ++b 和++c都不会执行的. (&&比||优先)
------解决方案--------------------
中间的不是位操作符,而是逻辑运算符!
------解决方案--------------------
根据适当逻辑条件执行整个语句或者是语句的前面某个部分 。
------解决方案--------------------
void main( )
{ int a,b,c,y;
a=y=c=0; //此处应该是 b, 你 写错了!
++a || ++b && ++c;
printf( "a=%d\t b=%d\t c=%d\n ",a,b,c);
a=b=c=0;
++a && ++b||++c;
printf( "a=%d\t b=%d\t c=%d\n ",a,b,c);
a=b=c=0;
++a && ++b && ++c;
printf( "a=%d\t b=%d\t c=%d\n ",a,b,c);
a=b=c=-1;
++a && ++b && ++c;
printf( "a=%d\t b=%d\t c=%d\n ",a,b,c);
a=b=c=-1;
++a && ++b || ++c;
printf( "a=%d\t b=%d\t c=%d\n ",a,b,c);
a=b=c=-1;
++a || ++b && ++c;
printf( "a=%d\t b=%d\t c=%d\n ",a,b,c);
}
------解决方案--------------------
唉,楼主连位操作符 与 逻辑运算符都还分不清
------解决方案--------------------
int main(int argc, char* argv[])
{
int a,b,c,y;
int i;
a=b=c=0;
i=((++a || ++b) && ++c);
printf( "a=%d b=%d c=%d i=%d\n ",a,b,c,i);
a=b=c=0;
i=(++a || ++b && ++c);
printf( "a=%d b=%d c=%d i=%d\n ",a,b,c,i);
a=b=c=0;
i=(++a || (++b && ++c));
printf( "a=%d b=%d c=%d i=%d\n ",a,b,c,i);
}
a=1 b=0 c=1 i=1
a=1 b=0 c=0 i=1
a=1 b=0 c=0 i=1
事实证明&&的优先级是大于||的
------解决方案--------------------
事实证明&&的优先级是大于||的
拜托:别犯这种无知的错误了。。。
------解决方案--------------------
Generics(网络流浪者) ( ) 信誉:100 Blog 加为好友 2007-4-26 10:32:41 得分: 0
我确实没把话说全. 不过&&确实是优先于||的,
++a || ++b && ++c 等价于 ++a || (++b && ++c), 而不是 (++a || ++b) && ++c,
所以在这种情况下, ++a只要是true, 后面的(++b && ++c)就不会被执行, 这叫做逻辑短路.
==================================================
既然这样的话 ,为什么
a=b=c=0;
++a || ++b && ++c;
printf( "a=%d\t b=%d\t c=%d\n ",a,b,c); 输出的1 0 0 ?
这样解释的话,你输出的 1 0 1 也不对啊。
------解决方案--------------------