印象中的逻辑运算符:

  ---学生:老师,在我的印象中,逻辑运算符用在条件判断的时候,真挺简单的,还有必要深究吗?

  ---老师:逻辑运算符确实在条件判断的时候用的比较多,但是并不能说简单。。。

请思考下面的示例:

 #include <stdio.h>

 int main()
{
int i = ;
int j = ;
int k = ; ++i || ++j && ++k; printf("%d\n", i);
printf("%d\n", j);
printf("%d\n", k); return ;
}

我们分析一下第九行的代码,逻辑与&&的优先级更高,应该限制性++j和++k,然后根据短路原则,++i不用执行,但是真的是这样吗?

运行结果和我们分析的完全相反,为什么呢,逻辑与的优先级是更高啊!

程序中的短路:

---  ||  从左向右开始计算:

  •   当遇到为真的条件时停止计算,整个表达式为真
  •   当所有条件为假的时候表达式才为假

--- &&  从左往右开始计算:

  •   当遇到条件为假的时候停止计算,整个表达式为假
  •   当所有条件为真时表达式才为真

咦?短路原则需要遵循从左往右开始计算,那么是不是与我们认可的优先级原则矛盾呢?

其实没有:逻辑表达式中,毫无疑问 && 比 || 具有更高的优先级

  其实上面例子中的第九行代码可以稍微改变一下结构     ++i || ++j && ++k;   >>>>>  (++i) || (++j && ++k);  >>>>>  (true&& ++i) || (++j && ++k);

在 && 和 || 混合运算的时候,整个表达式被看做 || 表达式,编译器从左向右开始计算每一个 && 表达式(遵循了优先级原则),当某个 && 表达式的值为真的时候,停止计算,整个表达式的值为真。

理解完了上面的代码可以尝试着看一下这段代码:

 #include <stdio.h>

 int g = ;

 int f()
{
printf("In f()...\n"); return g++;
} int main()
{
if( g || f() && f() )
{
printf("In if statement: %d\n", g);
} printf("In main(): %d\n", g); return ;
}

具体的分析思路和上面一样!

还有一种逻辑运算符  “!”   它究竟是什么呢?

  C预言中的逻辑非 !只认得0,只知道见了0就返回1.因此当其碰见的值不是0时,其结果为0.

示例:

 #include <stdio.h>

 int main()
{
printf("%d\n", !);
printf("%d\n", !);
printf("%d\n", !);
printf("%d\n", !-); return ;
}

这段代码的运行结果就很好的说明了逻辑非!运算符只认得0。

小结:

  • 程序中的逻辑表达式遵从短路规则
  • 在 && 与 || 和混合运算时:
  •   --真个整个表达式被看做 || 表达式
  •   --从左向右先计算 && 表达式
  •   --最后计算 || 表达式
  • 逻辑非!运算符只认得0
  •   --碰见0返回1,否则统统返回0,也就是说在C语言中只有0才代表假,其余的所有值均代表真。

C语言进阶—— 逻辑运算符分析15的更多相关文章

  1. 《C语言进阶剖析》课程目录

    <C语言进阶剖析>学习笔记                                                         本文总结自狄泰软件学院唐佐林老师的<C语言 ...

  2. 【R笔记】R语言进阶之4:数据整形(reshape)

    R语言进阶之4:数据整形(reshape) 2013-05-31 10:15 xxx 网易博客 字号:T | T 从不同途径得到的数据的组织方式是多种多样的,很多数据都要经过整理才能进行有效的分析,数 ...

  3. 03 java语言基础逻辑运算符

    03.01_Java语言基础(逻辑运算符的基本用法) A:逻辑运算符有哪些 &,|,^,! &&,|| B:案例演示 逻辑运算符的基本用法 注意事项: a:逻辑运算符一般用于连 ...

  4. C语言的本质(15)——C语言的函数接口入门

    C语言的本质(15)--C语言的函数接口 函数的调用者和其实现者之间存在一个协议,在调用函数之前,调用者要为实现者提供某些条件,在函数返回时,实现者完成调用者需要的功能. 函数接口通过函数名,参数和返 ...

  5. 利用R语言打造量化分析平台

    利用R语言打造量化分析平台 具体利用quantmod包实现对股票的量化分析 1.#1.API读取在线行情2.#加载quantmod包3.if(!require(quantmod)){4. instal ...

  6. Go语言源码分析之unsafe

    Go语言源码分析之unsafe 1.什么是unsafe unsafe 库让 golang 可以像C语言一样操作计算机内存,但这并不是golang推荐使用的,能不用尽量不用,就像它的名字所表达的一样,它 ...

  7. Solr4.8.0源码分析(15) 之 SolrCloud索引深入(2)

    Solr4.8.0源码分析(15) 之 SolrCloud索引深入(2) 上一节主要介绍了SolrCloud分布式索引的整体流程图以及索引链的实现,那么本节开始将分别介绍三个索引过程即LogUpdat ...

  8. R语言重要数据集分析研究——需要整理分析阐明理念

    1.R语言重要数据集分析研究需要整理分析阐明理念? 上一节讲了R语言作图,本节来讲讲当你拿到一个数据集的时候如何下手分析,数据分析的第一步,探索性数据分析. 统计量,即统计学里面关注的数据集的几个指标 ...

  9. Go语言的前景分析

    本文为原创文章,转载注明出处,asdfasdfasdf 欢迎扫码关注公众号flysnow_org或者网站http://www.flysnow.org/,第一时间看后续精彩文章.觉得好的话,顺手分享到朋 ...

随机推荐

  1. 在mac上使用github for mac 创建并上传项目

    1.下载github for mac https://mac.github.com/ 2.登陆 偏好设置 3.用Xcode 创建一个项目,勾上“create local git respository ...

  2. web项目无法被Eclipse的Tomcat识别的解决办法

    Eclipse 导入外部项目无法识别为web项目并且无法在部署到tomcat下 1.进入项目目录,找到 .project 文件: 2.找到 <natures> 代码段,在里面加入如下标签内 ...

  3. Windows到Ubuntu免密登陆

    Windows到Ubuntu免密登陆 首先检查C盘用户文件夹下是否有.ssh文件夹,同时检查该文件夹中是否有至少两个文件,一个是xxx_rsa和xxx_rsa.pub,一个是私钥文件一个是公钥文件. ...

  4. Design Pattern ->Bridge

    Layering & Contract Philosophy With additional indirection. class CWindowImp { public: virtual v ...

  5. .Net CIL

    MachineCode->Assembly->CIL(.Net) or SpecialMachineCode(JVM)->Pogramming code CIL Instructio ...

  6. Android - 常见的控件布局,左中右,左右等

    这里汇总的是自己在工作过程中,使用过的常见空间布局,记录在这里.详情如下: 1. 三个控件,分别处于左,中,右 要点:使用RelativeLayout <RelativeLayout andro ...

  7. Arm启动流程解析

    谈到arm的启动流程不得不说的是bootloader,但是我这篇文章主要来谈谈arm启动流程的,所以bootloader只是跟大家简介一下就ok.这篇文章我会谈到以下内容: 1.bootloader简 ...

  8. python模块详解 time与date time

    模块的分类: a:标准库 内置模块 如sys,os等 b:开源模块 大神封装好的 直接可以拿来用的. c:自定义模块 自己封装的模块 Python中通常表示时间的方式有:时间戳.格式化的日期.元组(九 ...

  9. AIR Native Extension for iOS 接入第三方sdk 如何实现 AppDelegate 生命周期

    作者:Panda Fang 出处:http://www.cnblogs.com/lonkiss/p/6492385.html 原创文章,转载请注明作者和出处,未经允许不可用于商业营利活动 去年到今年做 ...

  10. centos7 & centos6 rrdcache

    cat > /etc/systemd/system/rrdcached.service << EOF [Unit] Description=Data caching daemon f ...