[关闭]
@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

  1. int i = 0 , j = 1; ( 只要ij中至少一个的值为0 )
  2. if ( i && j ) {
  3. // 此处语句不执行
  4. }

  1. int i = 1 , j = 1;
  2. if ( i && j ) {
  3. // 此处语句执行
  4. }

我们考虑一个东西,叫做效率,计算机会自动地减少计算的部分,所以当A && B [ A,B是两个表达式 ] A的值为0的情况下 ,B表达式的值无论是否为0,计算机也不会去管,所以B就在运行的时候被“略过了”

||[或]的短路法则

然后我们继续来看

  1. int i = 1 , j = 0; ( 或者是 ij 中至少一个的值为1 )
  2. if ( i && j ) {
  3. // 此处语句执行
  4. }

  1. int i = 0 , j = 0;
  2. if ( i && j ) {
  3. // 此处语句不执行
  4. }

我们还是考虑效率,当A || B [ A,B是两个表达式 ] A的值为1的情况下 ,B表达式的值无论是否为1,计算机也不会去管,所以B就在运行的时候被“略过了”

一些小题目

以下题目省略部分代码(头文件,main函数等)
1.

  1. int i = 0 , j = 0;
  2. if( ++i || j ++ ) {
  3. printf( " Hello World ");
  4. }
  5. // 求j的值以及是否会有Hello World输出

2.

  1. int i = 0 , j = 0;
  2. if( i++ || i++ ) {
  3. printf( " Hello World ");
  4. }
  5. // 求i的值以及是否会有Hello World输出

3.

  1. int i = 1 , j = 1;
  2. if( i = 0 || j ++ ) {
  3. printf( " Hello World ");
  4. }
  5. // 求j的值以及是否会有Hello World输出

4.

  1. int i = 0 , j = 0;
  2. if( ++i && j++ ) {
  3. printf( " Hello World ");
  4. }
  5. // 求j的值以及是否会有Hello World输出

5.

  1. int i = 0 , j = 0;
  2. if( ++i && i++ ) {
  3. printf( " Hello World ");
  4. }
  5. // 求i的值以及是否会有Hello World输出

6.

  1. int i = 0 , j = 0;
  2. if( (++i && i -- || j ++ ) {
  3. printf( " Hello World ");
  4. }
  5. // 求j的值以及是否会有Hello World输出
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注