C 语言中,x += 5 == 4 是什么意思?
#讨论这个有意义吗?
这个是在知乎上看到的一个问题,评论挺多的。其中有人提到,研究这个东西有什么用?编程的时候我们不能这么写的。我记得在大学的时候,我们的副院长给我们上课,就给我们提到,要习惯并且喜欢使用 「( 」和 「)」,这两个符号。
所以上面的表达式,如果想表达清楚自己的意图,可以这样写
((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 是什么意思?相关推荐
- c语言中struct和c++中class实例对比
前言 实现游戏中简单的打怪升级的功能 c语言中的struct #include <stdio.h>typedef void(*Train)(struct player*, int); ty ...
- 关于C语言中printf函数“输出歧视”的问题
目录 关于C语言中printf函数"输出歧视"的问题 问题描述 探索问题原因 另一种研究方法 问题结论 关于C语言中printf函数"输出歧视"的问题 问题描述 ...
- C语言中“野指针”、“悬空指针”是什么?
目录 1."野指针"(wild pointer) 2."悬空指针"(dangling pointer) 1."野指针"(wild point ...
- c+语言+null,C/C++语言中NULL、'\0’和0的区别
NULL.'\0'和0的值是一样的,都是0,不过它们的表现形式不一样: 1. NULL: 即空指针,不过在C和C++中并不一样.在VS 2013的库文件string.h中可以看到如果定义. 1 /* ...
- 关于C语言中的malloc和free函数的用法
一.malloc()和free()的基本概念以及基本用法: 1.函数原型及说明: void *malloc(long NumBytes):该函数分配了NumBytes个字节,并返回了指向这块内存的指针 ...
- python global函数_如何使用python语言中的global关键字获取函数值
在python语言中,如果在函数外层定义了一个全局变量a,函数内部又有一个同名的局部变量,想要这个全局变量的值改成为局部变量的值,可以使用global.下面利用一个实例说明如何实现这个场景,操作如下: ...
- c语言中的if语句_If ... C中的其他语句解释
c语言中的if语句 Conditional code flow is the ability to change the way a piece of code behaves based on ce ...
- C 语言中 void* 详解及应用介绍
void 在英文中作为名词的解释为 "空虚.空间.空隙",而在 C 语言中,void 被翻译为"无类型",相应的void * 为"无类型指针" ...
- java 英文字符 字节_3、在JAVA语言中,每个英文字符占 个字节,每个中文汉字占( )个字节。...
[判断题]中心原子中的几个原子轨道杂化时,必形成数目相同的杂化轨道. [单选题]集合 用区间表示正确的是 ( ) [单选题]15.Java语言的类间的继承关系是 [单选题]8.编译Java Appli ...
- 8位alu运算器(vhdl语言)_C语言中signed char类型,能表示-128到127,为什么负数多一位?...
初学者在学习C语言,谈到不同数据类型时,一般都能理解 unsigned 和 signed 的区别,无非就是有无符号而已.但是对于 signed 数据类型的数据范围,初学者却常常会感到迷惑. 对于 si ...
最新文章
- chrome动态ip python_简单python代码实现模拟浏览器操作
- 实例说明listen()函数第二个参数的意义与用法
- centos 管道符取第一行_CentOS 7 文件操作命令
- hadoop windows
- iOS AFN监听网络状态
- Graham-Scan小总结——toj2317 Wall
- sql server 2008r2安装注意的问题
- 开发跨境电商/外贸商城网站需要考虑的事项
- android lrc歌词解析,Android解析lrc里的歌词
- linux老自动重启原因,【重启】查询linux自动重新启动原因
- 不撞南墙不回头----深度优先搜索
- GRDDC2020数据集下载及介绍
- 13款开源搜索引擎的介绍
- IBM ThinkPad 机子无法开机的解决办法 - 按开机键没有反应 - E49
- 项目成本管理名词解析
- usaco training 4.4.1 Shuttle Puzzle 题解
- 《java编程思想》第七章 复用类
- 联邦学习开源框架FATE助力腾讯神盾沙箱,携手打造数据安全合作生态
- pycharm使用anaconda
- PLC电路元器件基础
热门文章
- C# 2.0对现有语法的改进
- onvif发送订阅规则
- 使用pip安装virtualenv时出现问题
- 北海市计算机等级考试,2021上半年北海市计算机二级报名时间|网上报名入口【已开通】...
- canvas clear 指定属性的元素_好程序员web前端分享CSS属性组成及作用
- redis配置主从没效果_跟我一起学Redis之加个哨兵让主从复制更加高可用
- C# Socket 编程详解
- 假定Csomething是一个类,执行下面这些语句后,内存里创建了几个Csomething对象
- Linux设备驱动模型2——总线式设备驱动组织方式
- html里嵌入语音,HTML5语音合成API语音/语言支持