int k=15,t;

t=k&&k==5&&++k;

运行后得到的 k为什么是 15不是16 ??

====

要理解这个问题分三步:

1.重点记住

=的优先级比&&,==,++都要低,且它的结合性为 右

结合性

&&的优先级低于==,++,且它的结合性为 左 结合性

==的优先级低于++,且它的结合性为 左 结合性

++的优先级这这个表达式中最高,且它的结合性为 右 结合性

2.时刻想到

逻辑运算符&&和||会出现短路现象:

* && *

:当&&的左边为假时短路,此时不再执行&&右边的表达式(注意是&&右边的另一个表达式,而不是右边所有到到语句结束的表达式!!)

* || * :当||的左边为真时短路,些时不再执行||右边的表达式

3.详细推导

在表达式t=k&&k==5&&++k中,根据运算符的优先级和结合性来确定,表达式相当于:

t= ( k && (k==5)

&& (++k) )

根据&&的结合性,表达中肯定先验证第一个&&的两边为:k

&& (k==5)

由于k为15,左边为真,并没有短路,所以继续看&&的右边,表达k==5明显为假,值为0,所以表达式k

&& (k==5)为假,值为0,此时表达简化为:

t= ( 0 && (++k) )

此时表达式中的&&为原表达式中的第二个&&,再看这个表达式的0

&&

(++k),很明显&&的左边为0,发生短路,那么不再执行&&的(++k),所以k保持原值不会为16,此时原表达式又进一步简化为:

t=0

最后,t的值为0,k的值不变为15

这样解释,你明白吗?

========

计算机不是人,它不会像人一样直接就找到优先级最高的*号进行运算

理解程序编译过程相当重要

附录:C语言运算符及优先级

优先级 运算符 含义 运算符类型 结合方向

15 () 圆括号 单目 自左向右

[] 下标运算符 —> 指向结构体成员运算符 、 结构体成员运算符 14 ! 逻辑非运算符

c语言判断算符优先级,C语言算符优先级(精华)相关推荐

  1. c语言判断语句案例,c语言判断语句怎么写

    1. C语言中判断语句怎么表示 int main(void){ char putin[100]; fflush(stdin); while(1){ gets(putin); printf(" ...

  2. c语言 判断日期时间_C语言中不得不知的那些“关键字”和“控制语句”

    谈及C语言,我想凡是学过它的朋友都有这样一种感觉,那就是"让我欢喜让我忧."欢喜的是,C语言功能非常强大.应用广泛,一旦掌握了后,你就可以理直气壮地对他人说"我是电脑高手 ...

  3. c语言判断语句大全,C语言条件判断语句:if、else if、else

    1)简单介绍三种形式的条件判断语句:if.else if.else if:if(表达式) 执行语句 if:判断表达式内容,如果为true(真),就执行语句 else if:if(表达式) 执行语句 e ...

  4. 13c语言中的文件是一种流式文件,读写时均以字符为单位.,C语言判断题部分.doc...

    C语言判断题部分 ?第一章 C语言中,字符数据用格式说明"%c"来输出,字符串数据用格式说明"%s"来输出.TC语言中,关键字及编译预处理命令用小写字母书写.T ...

  5. c语言判断一个数是否为偶数源代码,c语言判断一个数是否为偶数

    #include #include _Bool isOu(int n){ //高度注意:&的优先级低于== )==){ return true; } else{ return false; } ...

  6. c语言九三字符串的字母个数,C语言判断闰年和平年

    C语言判断闰年和平年 #includevoid fun(int year) { if((year%4==0&&year%100!=0)||(year%100==0&&y ...

  7. c语言中 ||优先级,C语言运算符号的优先级 A: B: C:|| D:|

    我知道从高到低为:圆括号 单目运算符 算术运算符 关系运算符 逻辑运算C语言运算符优先级顺序如下所示: 自增运算符 ++ 和自减运算符 ,在作后缀运算符(如表达式 x++)时,较其用作前缀运算符(如表 ...

  8. 利用c语言设置密码错误循环,c语言运算符优先级与while循环案例

    sizeof可以获取数据类型的内存中的大小(字节) #include #include // standared 标准 // input output 输入/输出 // header 头 .h头文件 ...

  9. C语言怎么判断字符YN,c语言中的宏_详解(转)

    1. 简单宏定义 简单的宏定义有如下格式: [#define指令(简单的宏)] #define 标识符替换列表 替换列表是一系列的C语言记号,包括标识符.关键字.数.字符常量.字符串字面量.运算符和标 ...

  10. c语言判断奇偶数误区,初学者对于C语言中的误区

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 作者:陈老师,华清远见嵌入式学院讲师. 1.不能清晰理解"=="运算以及优先级和结核性的含义 在判断i,j,k三个变量是否相等时往往会 ...

最新文章

  1. 理解委托(delegate)及为什么要使用委托
  2. 【mysql技巧】按某一字段分组取最大(小)值所在行的数据
  3. 【罗马数字转整数】算法优化笔记
  4. 2018移动端页面适配-自适应最新方案直接写px--------通过gulp工作流搭建一体化的移动端开发环境
  5. go语言快速刷《程序员面试金典》(2)
  6. C#LeetCode刷题-剑指Offer
  7. Dockerfile构建LNMP分离环境部署wordpress
  8. 超越界限,定义未来-- HP刀片工作站WS460c Gen9无惧4K挑战
  9. 在制作只有一页的WORD小报时再添加一页
  10. 20155227第十二周课堂实践
  11. 算法 博士_Strangecode博士-我如何学会不再担心并喜欢算法
  12. 【SaaS培训认证】AWS Solutions Architect Associate
  13. Java从零打造企业级电商项目实战 项目初始化
  14. linux下.txt文件名乱码,Linux下打开txt文件乱码问题解决方案
  15. python免费自学资源(视频+图文)
  16. 抖音跳转到微信引流的方法,抖音跳转微信的功能解析
  17. 商业智能在医疗卫生领域的应用与前景
  18. svn 创建分支、切换分支 及 合并分支 操作
  19. 顺时针螺旋打印二维数组
  20. Microsoft Remote Desktop for Mac(远程桌面连接工具)

热门文章

  1. java socket连接池_Java - Socket连接池
  2. 抖音无水印解析API
  3. 如何获取ppt内的视频文件
  4. Python3 网络爬虫 <教程全集>
  5. Chrome最新版如何安装代理Proxy SwitchyOmega
  6. 微信小程序阻止事件冒泡【看这里】
  7. 半导体PN结的工作原理
  8. python EXCEL表格数据对比
  9. html中如何显示emf图片,emf是什么格式
  10. 关于模电与数电的基础知识