@Senl
2017-07-11T15:04:42.000000Z
字数 1160
阅读 2213
新生群学习
&&是与的意思 ||是或的意思
&&和||连用的时候最好加上括号
有师弟提到,1< a < 7这种情况下怎么表示:
a > 1 && a < 7
那同理: a < 1 并 a > 7 就是 :
a < 1 && a > 7
那 || 或就比较好理解了,前后两个条件若至少一个成立,整个表达式成立(值为1),若两个条件同时不成立,表达式的值才为0.
注意 : && 和 || 连用的时候最好加上括号
&&,||遵守短路原则,短路法则怎么理解
首先,对于&&(与)来说,前后条件均成立时候,其整个的表达式的值就是1,若前后两个条件有一个条件为0的时候,表达式的值为0
int i = 0 , j = 1; ( 只要i,j中至少一个的值为0 )if ( i && j ) {// 此处语句不执行}
int i = 1 , j = 1;if ( i && j ) {// 此处语句执行}
我们考虑一个东西,叫做效率,计算机会自动地减少计算的部分,所以当A && B [ A,B是两个表达式 ] A的值为0的情况下 ,B表达式的值无论是否为0,计算机也不会去管,所以B就在运行的时候被“略过了”
然后我们继续来看
int i = 1 , j = 0; ( 或者是 i,j 中至少一个的值为1 )if ( i && j ) {// 此处语句执行}
int i = 0 , j = 0;if ( i && j ) {// 此处语句不执行}
我们还是考虑效率,当A || B [ A,B是两个表达式 ] A的值为1的情况下 ,B表达式的值无论是否为1,计算机也不会去管,所以B就在运行的时候被“略过了”
以下题目省略部分代码(头文件,main函数等)
1.
int i = 0 , j = 0;if( ++i || j ++ ) {printf( " Hello World ");}// 求j的值以及是否会有Hello World输出
2.
int i = 0 , j = 0;if( i++ || i++ ) {printf( " Hello World ");}// 求i的值以及是否会有Hello World输出
3.
int i = 1 , j = 1;if( i = 0 || j ++ ) {printf( " Hello World ");}// 求j的值以及是否会有Hello World输出
4.
int i = 0 , j = 0;if( ++i && j++ ) {printf( " Hello World ");}// 求j的值以及是否会有Hello World输出
5.
int i = 0 , j = 0;if( ++i && i++ ) {printf( " Hello World ");}// 求i的值以及是否会有Hello World输出
6.
int i = 0 , j = 0;if( (++i && i -- ) || j ++ ) {printf( " Hello World ");}// 求j的值以及是否会有Hello World输出