#讨论这个有意义吗?

这个是在知乎上看到的一个问题,评论挺多的。其中有人提到,研究这个东西有什么用?编程的时候我们不能这么写的。我记得在大学的时候,我们的副院长给我们上课,就给我们提到,要习惯并且喜欢使用 「( 」和 「)」,这两个符号。

所以上面的表达式,如果想表达清楚自己的意图,可以这样写

((x += 5) == 4)

或者是

(x += (5 == 4))

但是有些程序员为什么喜欢这样写呢?

我们可以肯定,写出这样代码的人,一定对运算符优先级背得滚瓜烂熟了。如果作为一个程序员,他认为对运算符要了如指掌,他觉得别人对这个代码肯定一眼就能看懂,他写出这样的代码也是没有问题的。

我们学这样的代码有什么用?

学习这样并不表示我们要写出这样的代码,而是,我们如果在工作学习中,遇到这样的代码,我们就一眼能看出来这个代码的作用。

C语言的标准有几百页,大部分人不会仔细研究每个细节,有些工程师觉得某些东西没有用,大概率是因为他在自己的工作中没有用到。有的程序员喜欢研究或者在工作中需要使用这样的方法,这就是这种代码存在的其中一个原因吧。

#表达式和运算符优先级

C语言在一个表达式中,如果遇到几个运算符,要考虑优先级结合方向

比如,表达式 x pri1 y pri2 z,可能出现两种可能性

  • (x pri1 y )pri2 z

  • x pri1 (y pri2 z)

如果运算符 pri1 的优先级比pri2 高,那么就是上面的第一种情况。

如果运算符 pri1 的优先级比pri2 低,那么就是上面的第二种情况。

如果优先级相同,那就要考虑结合方向。

结合方向是 「左到右」或者「右到左」。

例如,「= 」 的结合方向是 「右到左」。

所以

a = b = c  表达式的意义是 a =( b = c  )

而 「+」的结合方向是 「左到右」

所以

a + b + c  表达式的意义是 (a + b) + c

#C语言运算符优先级

#解析上面的表达式

x += 5 == 4
  • 「+=」 的优先级是14

  • 「 ==」 的优先级是 7

所以上面表达式的意义是

x += (5 == 4)

运行一下

#表达式的巧用

很多人不怎么用这种取巧的写法,我这两天看代码看到一个,截图给大家看看,非常简单,也是一种取巧的方法,挺有意思的。一般情况下,我们还是会把 x = y 写在if 外面,直接写在if里面还是挺有意思的。

如果写成下面这样的话会输出什么呢?评论给出你的答案~

#include "stdio.h"int main(void)
{int x = 2; int y = 4;int z = 4;if( x = y >= z){printf("-----------01\n");}return (0);
}

回复「 篮球的大肚子」进入技术群聊

回复「1024」获取1000G学习资料

C 语言中,x += 5 == 4 是什么意思?相关推荐

  1. c语言中struct和c++中class实例对比

    前言 实现游戏中简单的打怪升级的功能 c语言中的struct #include <stdio.h>typedef void(*Train)(struct player*, int); ty ...

  2. 关于C语言中printf函数“输出歧视”的问题

    目录 关于C语言中printf函数"输出歧视"的问题 问题描述 探索问题原因 另一种研究方法 问题结论 关于C语言中printf函数"输出歧视"的问题 问题描述 ...

  3. C语言中“野指针”、“悬空指针”是什么?

    目录 1."野指针"(wild pointer) 2."悬空指针"(dangling pointer) 1."野指针"(wild point ...

  4. c+语言+null,C/C++语言中NULL、'\0’和0的区别

    NULL.'\0'和0的值是一样的,都是0,不过它们的表现形式不一样: 1. NULL: 即空指针,不过在C和C++中并不一样.在VS 2013的库文件string.h中可以看到如果定义. 1 /* ...

  5. 关于C语言中的malloc和free函数的用法

    一.malloc()和free()的基本概念以及基本用法: 1.函数原型及说明: void *malloc(long NumBytes):该函数分配了NumBytes个字节,并返回了指向这块内存的指针 ...

  6. python global函数_如何使用python语言中的global关键字获取函数值

    在python语言中,如果在函数外层定义了一个全局变量a,函数内部又有一个同名的局部变量,想要这个全局变量的值改成为局部变量的值,可以使用global.下面利用一个实例说明如何实现这个场景,操作如下: ...

  7. c语言中的if语句_If ... C中的其他语句解释

    c语言中的if语句 Conditional code flow is the ability to change the way a piece of code behaves based on ce ...

  8. C 语言中 void* 详解及应用介绍

    void 在英文中作为名词的解释为 "空虚.空间.空隙",而在 C 语言中,void 被翻译为"无类型",相应的void * 为"无类型指针" ...

  9. java 英文字符 字节_3、在JAVA语言中,每个英文字符占 个字节,每个中文汉字占( )个字节。...

    [判断题]中心原子中的几个原子轨道杂化时,必形成数目相同的杂化轨道. [单选题]集合 用区间表示正确的是 ( ) [单选题]15.Java语言的类间的继承关系是 [单选题]8.编译Java Appli ...

  10. 8位alu运算器(vhdl语言)_C语言中signed char类型,能表示-128到127,为什么负数多一位?...

    初学者在学习C语言,谈到不同数据类型时,一般都能理解 unsigned 和 signed 的区别,无非就是有无符号而已.但是对于 signed 数据类型的数据范围,初学者却常常会感到迷惑. 对于 si ...

最新文章

  1. chrome动态ip python_简单python代码实现模拟浏览器操作
  2. 实例说明listen()函数第二个参数的意义与用法
  3. centos 管道符取第一行_CentOS 7 文件操作命令
  4. hadoop windows
  5. iOS AFN监听网络状态
  6. Graham-Scan小总结——toj2317 Wall
  7. sql server 2008r2安装注意的问题
  8. 开发跨境电商/外贸商城网站需要考虑的事项
  9. android lrc歌词解析,Android解析lrc里的歌词
  10. linux老自动重启原因,【重启】查询linux自动重新启动原因
  11. 不撞南墙不回头----深度优先搜索
  12. GRDDC2020数据集下载及介绍
  13. 13款开源搜索引擎的介绍
  14. IBM ThinkPad 机子无法开机的解决办法 - 按开机键没有反应 - E49
  15. 项目成本管理名词解析
  16. usaco training 4.4.1 Shuttle Puzzle 题解
  17. 《java编程思想》第七章 复用类
  18. 联邦学习开源框架FATE助力腾讯神盾沙箱,携手打造数据安全合作生态
  19. pycharm使用anaconda
  20. PLC电路元器件基础

热门文章

  1. C# 2.0对现有语法的改进
  2. onvif发送订阅规则
  3. 使用pip安装virtualenv时出现问题
  4. 北海市计算机等级考试,2021上半年北海市计算机二级报名时间|网上报名入口【已开通】...
  5. canvas clear 指定属性的元素_好程序员web前端分享CSS属性组成及作用
  6. redis配置主从没效果_跟我一起学Redis之加个哨兵让主从复制更加高可用
  7. C# Socket 编程详解
  8. 假定Csomething是一个类,执行下面这些语句后,内存里创建了几个Csomething对象
  9. Linux设备驱动模型2——总线式设备驱动组织方式
  10. html里嵌入语音,HTML5语音合成API语音/语言支持