C 语言所有运算符及优先级、结合性

参考:《C Primer Plus 第六版》

Tip:有关优先级、结合性的表格在最后面。


【1】算数运算符

  • ‘+’(“加号”)(二元)【表达式1 + 表达式2】:把表达式2的值加到表达式1的值上。

  • '+'(“正号”)(一元)【+表达式】:生成一个大小和符号都与右边表达式的值相同的值。

  • '-'(“减号”)(二元)【表达式1 - 表达式2】:从表达式1的值中减去表达式2的值。

  • '-'(“负号”)(一元)【-表达式】:生成一个与右边表达式的值大小相等符号相反的值。

  • '*'(“乘号”)(二元)【表达式1 ***** 表达式2】:把表达式1的值乘以表达式2的值。

  • '/'(“除号”)(二元)【表达式1 / 表达式2】:把表达式1的值除以表达式2的值:如果两个运算对象都是整数,其结果要被截断。

  • '%'(“求模/取余”)(二元)【表达式1 % 表达式2】:得表达式1的值除以表达式2值时的余数

  • '++'(“自增”)(一元)【++表达式/表达式++】:把右边表达式的值加1(前缀模式),或把左边表达式的值加1(后缀模式)。

  • '--'(“自减”)(一元)【--表达式/表达式--**】:把右边表达式的值减1(前缀模式),或把左边表达式的值减1(后缀模式)。

Tip:'+'(“正号”)和'-'(“负号”),又称符号运算符。

【2】关系运算符

  • '<'(“小于号”)(二元)【表达式1 < 表达式2】:用于判断表达式1的值是否小于表达式2的值。
  • '<='(“小于等于号”)(二元)【表达式1 <= 表达式2】:用于判断表达式1的值是否小于或者等于表达式2的值。
  • '>'(“大于号”)(二元)【表达式1 > 表达式2】:用于判断表达式1的值是否大于表达式2的值。
  • '>='(“大于等于号”)(二元)【表达式1 >= 表达式2】:用于判断表达式1的值是否大于或者等于表达式2的值。
  • '=='(“等于号”)(二元)【表达式1 == 表达式2】:用于判断表达式1的值是否等于表达式2的值。
  • '!='(“不等于号”)(二元)【表达式1 != 表达式2】:用于判断表达式1的值是否不等于表达式2的值。

【3】逻辑运算符

  • '&&'(逻辑与)(二元)【表达式1 && 表达式2】:表达式1为真并且表达式2为真则为真,否则为假(同真为真,有假即假)。
  • '||'(逻辑或)(二元)【表达式1 || 表达式2】:表达式1为真或者表达式2为真则为真,否则为假(有真则真,同假为假)。
  • '!'(逻辑非)(一元)【! 表达式】:右边表达式为假时真,真时假(真变假,假变真)。

【4】条件运算符(三目运算符)

  • ' ? : '(三元)【表达式1 ? 表达式2 : 表达式3】:如果表达式1为真,则整个表达式的值等于表达式2的值,否则为表达式3的值。

【5】 位运算符

  • ''**(按位取反)(一元)【** 表达式】:对表达式的值的每一位取反(1变0,0变1)。
  • '&'(按位与)(二元)【表达式1 & 表达式2】:对表达式1表达式2的值的每一位,进行“逻辑与”操作(同1为1,有0则0)。
  • '|'(按位或)(二元)【表达式1 | 表达式2】:对表达式1表达式2的值的每一位,进行“逻辑或”操作(有1则1,同0为0)。
  • '^'(按位异或)(二元)【表达式1 ^ 表达式2】:对表达式1表达式2的值的每一位,不同为1, 相同为0
  • '<<'(按位左移)(二元)【表达式1 << 表达式2】:把表达式1的值的每一位向左移动表达式2的值个单位,多余截断,空位补0。
  • '>>'(按位右移)(二元)【表达式1 >> 表达式2】:把表达式1的值的每一位向右移动表达式2的值个单位,多余截断,空位补0。

【6】赋值运算符

注意:所有被赋值的表达式都需要能够被赋值。

C语言有一个基本赋值运算符和多个复合赋值运算符

基本赋值运算符:

  • '='(二元)【表达式1 = 表达式2】:把表达式2的值赋给表达式1

复合赋值运算符:

  • '+='(二元)【表达式1 += 表达式2】:相当于表达式1 = 表达式1 + 表达式2

  • '-='(二元)【表达式1 -= 表达式2】:相当于表达式1 = 表达式1 - 表达式2

  • '*='(二元)【表达式1 *= 表达式2】:相当于表达式1 = 表达式1 * 表达式2

  • '/='(二元)【表达式1 /= 表达式2】:相当于表达式1 = 表达式1 / 表达式2

  • '%='(二元)【表达式1 %= 表达式2】:相当于表达式1 = 表达式1 % 表达式2

  • '&='(二元)【表达式1 &= 表达式2】:相当于表达式1 = 表达式1 & 表达式2

  • '|='(二元)【表达式1 |= 表达式2】:相当于表达式1 = 表达式1 | 表达式2

  • '^='(二元)【表达式1 ^= 表达式2】:相当于表达式1 = 表达式1 ^ 表达式2

  • '>>='(二元)【表达式1 >>= 表达式2】:相当于表达式1 = 表达式1 >> 表达式2

  • '<<='(二元)【表达式1 <<= 表达式2】:相当于表达式1 = 表达式1 << 表达式2

【7】与指针有关的运算符

  • '&'(取地址)(一元)【&表达式】:获取右边表达式的内存地址。表达式应该是或者它的值应该代表一个变量。
  • '*'(解引用/间接引用)(一元)【*****表达式】:获取右边表达式所指向内存空间的值。表达式应该是或者它的值应该代表一个指针变量。

【8】结构和联合运算符

  • '.'(成员运算符)(二元)【表达式1.表达式2】:用于访问结构或联合的成员。表达式1应该是或者它的值应该代表一个结构联合变量,表达式2必须是表达式1中的成员。
  • '->'(间接成员运算符/或结构指针运算符)(二元)【表达式1->表达式2】:用于访问结构或联合的成员。表达式1应该是或者它的值应该代表一个结构联合变量的指针表达式2必须是表达式1中的成员。

【9】混合运算符

  • 'sizeof'(一元)【sizeof(表达式)】:顾名思义,计算表达式所占内存空间的大小,单位是char的大小,而char的大小通常是1字节。表达式应该是或者它的值应该代表一个变量,或者应该是一种数据类型。当表达式是或者它的值代表一个变量的时候,【sizeof(表达式)】还可以写为【sizeof 表达式】(C11),但建议全部使用【sizeof(表达式)】的写法。
  • '_Alignof'(一元)【_Alignof(类型)】(C11):顾名思义,计算类型对齐方式,这个运算符只针对某种数据类型。对于GCC,Clang这两个编译器,还支持alignof的写法,但考虑到兼容性和可移植性,不建议使用。
  • '(数据类型)'(一元)【(数据类型)(表达式)】:把表达式的值强制转换数据类型类型的。对于【(数据类型)(表达式)】,还可以写成【数据类型(表达式)】或者【(数据类型)表达式】,至少有一个括号。

【10】其他运算符

以下四种运算符知道它们也算运算符即可,甚至不知道也没事,不必深究。

在书《C Primer Plus 第六版》的参考资料中,在列举C的运算符时,直接跳过了这四种运算符。

  • '[]'(数组索引运算符)(二元)【表达式1[表达式2]】:用于访问表达式1的第表达式2个元素,表达式1应该是或者它的值应该代表一个数组,表达式2应该是或者它的值应该代表一个非负整数。
  • '{}'(复合语句或初始化列表):通常不把它当作运算符,但严格意义上它也是运算符,知道即可。
  • '()'(函数调用运算符):用于调用函数以及向函数传递参数。
  • ','(逗号运算符):用于链接多个表达式。

表格——优先级、结合性

下表按优先级从高到低的顺序列出了C语言运算符,并给出了其结合性。

运算符(优先级从高至低) 结合性
++(后缀) --(后缀) ()(函数调用)
[ ] { }(复合字面量) . ->
从左往右
++(前缀) --(前缀) - + ~ !
*(解引用) &(取地址)
sizeof _Alignof
从右往左
(类型名) 从右往左
* / % 从左往右
+ - 从左往右
<< >> 从左往右
< > <= >= 从左往右
== != 从左往右
& 从左往右
^ 从左往右
| 从左往右
&& 从左往右
|| 从左往右
? : (条件表达式) 从右往左
= *= /= += -= <<= >>= &= |= ^= 从右往左
,(逗号运算符) 从左往右

C语言所有运算符及优先级、结合性的更多相关文章

  1. C语言的运算符的优先级与结合性+ASCII表

    [0]README 0.1) 内容来源于 C程序设计语言, 旨在整理出C语言的运算符的优先级与结合性, 如下图所示(哥子 记了大半年都没有记住,也是醉了,每次都要去翻): Alert)以下内容转自:h ...

  2. 001_C语言中运算符的优先级

    总的来说就是: 1. 最高:单目运算符(() > * 解引用,&取地址,-取相反数,++等自增(或减)运算,!取反运算...); 2. 次之:双目运算符(算数运算符 > 移位运算符 ...

  3. C/C++知识补充(2) C/C++操作符/运算符的优先级 & 结合性

    , 逗号操作符 for( i = 0, j = 0; i < 10; i++, j++ ) ... 从左到右   Precedence Operator Description Example ...

  4. [c语言]运算符的优先级与结合性

    c语言中运算符的优先级和结合性常常被人混淆一谈,本文目的在于简单谈谈两者的区别.本文举几个简单的例子说明,这些运算符也特别常用. 首先要明白的是:优先级决定表达式中各种不同的运算符起作用的优先次序:而 ...

  5. [转]说说C语言运算符的“优先级”与“结合性”

    补充自己的一点理解: 1.关于++i 与 i++的区别. ++i 和 i++如果是单独使用的语句,即二者后面均加上分号,或者其他单独使用的语句,没有任何区别.例如: for(i=0;i<100; ...

  6. 说说C语言运算符的“优先级”与“结合性”

    论坛和博客上常常看到关于C语言中运算符的迷惑,甚至是错误的解读.这样的迷惑或解读大都发生在表达式中存在着较为复杂的副作用时.但从本质上看,仍然是概念理解上的偏差.本文试图通过对三个典型表达式的分析,集 ...

  7. C语言运算符和优先级

    关于C语言运算符和优先级,经整理众多博客资料汇入自己的实战,如下:        a.算术运算        C语言一共有34种运算符,包括常见的加减乘除运算.        1) 加法:+ 还可以表 ...

  8. swift:高级运算符(位运算符、溢出运算符、优先级和结合性、运算符重载函数)

    swift:高级运算符 http://www.cocoachina.com/ios/20140612/8794.html 除了基本操作符中所讲的运算符,Swift还有许多复杂的高级运算符,包括了C语和 ...

  9. C语言语法之运算符及优先级

    注:该内容整理自以下链接. http://blog.csdn.net/huangblog/article/details/8271791 表:C语言运算符及优先级 优先级 运算符 名称或含义 使用形式 ...

  10. C语言运算符的优先级

    熟悉C语言的同学都知道,C语言众多的运算符及繁琐难记的优先级总是搞得我们这些C初学者头大.那么本文就 对C语言中所有的运算符进行汇总,并对其优先级进行一定的介绍. 这里虽然对所有C运算符的优先级进行了 ...

随机推荐

  1. 联通光猫获取超级管理员密码,联通宽带逻辑ID 获取

    首先使用普通账户登录然后访问这个链接 http://192.168.1.1/backpresettings.conf 保存backpresettings.conf 打开文件就可以看到 cuadmin ...

  2. 优化 Redis 集群缓存分配:解决节点间分配不均导致内存溢出问题

    一.Redis 集群部署简介 在现代应用程序中,缓存被广泛应用以提高性能和减轻后端数据库的压力.本文将探讨面对 Redis 集群缓存分配不均问题时的解决方法. 我们的 Redis 集群部署包括 3 主 ...

  3. Kioptrix Level 1

    Kioptrix这个系列靶机默认是桥接模式,如果我们kali使用NAT是扫描不到靶机的,通过VM的靶机网络设置也不能更改成功. 解决方式:每次下载好靶机先不导入VM,如果已经导入,需要"移除 ...

  4. 如何使用io_uring构建快速响应的I/O密集型应用?

    本文分享自华为云社区<如何使用io_uring构建快速响应的I/O密集型应用>,作者: Lion Long . 当涉及构建快速响应的I/O密集型应用时,io_uring技术展现出了其卓越的 ...

  5. 性能调优 session 1 - 计算机体系结构 量化研究方法

    近期本人参与的存储系统项目进入到性能调优阶段,当前系统的性能指标离项目预期目标还有较大差距.本人一直奉行"理论指导下的实践",尤其在调试初期,更要抓住主要矛盾,投入最少的资源来获取 ...

  6. 【matplotlib基础】--刻度

    Matplotlib中刻度是用于在绘图中表示数据大小的工具. 刻度是坐标轴上的数字或标签,用于指示数据的大小或值,通常以整数或小数表示,具体取决于坐标轴的类型和限制. 1. 主次刻度 默认的绘制时,坐 ...

  7. 遥遥领先.NET 7, .NET 8 性能大幅提升

    每个版本必有的性能提升汇总文章又来了.大家可以学习阅读了. 微软 .NET 开发团队的工程师 Stephen Toub 发表博客<Performance Improvements in .NET ...

  8. 5.0 CRC32校验技术概述

    CRC校验技术是用于检测数据传输或存储过程中是否出现了错误的一种方法,校验算法可以通过计算应用与数据的循环冗余校验(CRC)检验值来检测任何数据损坏.通过运用本校验技术我们可以实现对特定内存区域以及磁 ...

  9. modbus转profinet网关连接ABB变频器在博图程序案例

    modbus转profinet网关连接ABB变频器在博图程序案例 在博图里PLC无需编程利用兴达易控modbus转Profinet网关将ABB变频器接入到西门子网络中,用到设备为西门子1200PLC, ...

  10. 08-03_阅读flask上下文前夕补充、flask请求上下文、数据库连接池

    文章目录 阅读flask上下文前夕补充 01 偏函数 02 __add__的使用 03 chain函数 2 flask请求上下文 1 首先分析请求上下文对象(ctx)创立 2 把请求对象(ctx)添加 ...