C语言所有运算符及优先级、结合性
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语言所有运算符及优先级、结合性的更多相关文章
- C语言的运算符的优先级与结合性+ASCII表
[0]README 0.1) 内容来源于 C程序设计语言, 旨在整理出C语言的运算符的优先级与结合性, 如下图所示(哥子 记了大半年都没有记住,也是醉了,每次都要去翻): Alert)以下内容转自:h ...
- 001_C语言中运算符的优先级
总的来说就是: 1. 最高:单目运算符(() > * 解引用,&取地址,-取相反数,++等自增(或减)运算,!取反运算...); 2. 次之:双目运算符(算数运算符 > 移位运算符 ...
- C/C++知识补充(2) C/C++操作符/运算符的优先级 & 结合性
, 逗号操作符 for( i = 0, j = 0; i < 10; i++, j++ ) ... 从左到右 Precedence Operator Description Example ...
- [c语言]运算符的优先级与结合性
c语言中运算符的优先级和结合性常常被人混淆一谈,本文目的在于简单谈谈两者的区别.本文举几个简单的例子说明,这些运算符也特别常用. 首先要明白的是:优先级决定表达式中各种不同的运算符起作用的优先次序:而 ...
- [转]说说C语言运算符的“优先级”与“结合性”
补充自己的一点理解: 1.关于++i 与 i++的区别. ++i 和 i++如果是单独使用的语句,即二者后面均加上分号,或者其他单独使用的语句,没有任何区别.例如: for(i=0;i<100; ...
- 说说C语言运算符的“优先级”与“结合性”
论坛和博客上常常看到关于C语言中运算符的迷惑,甚至是错误的解读.这样的迷惑或解读大都发生在表达式中存在着较为复杂的副作用时.但从本质上看,仍然是概念理解上的偏差.本文试图通过对三个典型表达式的分析,集 ...
- C语言运算符和优先级
关于C语言运算符和优先级,经整理众多博客资料汇入自己的实战,如下: a.算术运算 C语言一共有34种运算符,包括常见的加减乘除运算. 1) 加法:+ 还可以表 ...
- swift:高级运算符(位运算符、溢出运算符、优先级和结合性、运算符重载函数)
swift:高级运算符 http://www.cocoachina.com/ios/20140612/8794.html 除了基本操作符中所讲的运算符,Swift还有许多复杂的高级运算符,包括了C语和 ...
- C语言语法之运算符及优先级
注:该内容整理自以下链接. http://blog.csdn.net/huangblog/article/details/8271791 表:C语言运算符及优先级 优先级 运算符 名称或含义 使用形式 ...
- C语言运算符的优先级
熟悉C语言的同学都知道,C语言众多的运算符及繁琐难记的优先级总是搞得我们这些C初学者头大.那么本文就 对C语言中所有的运算符进行汇总,并对其优先级进行一定的介绍. 这里虽然对所有C运算符的优先级进行了 ...
随机推荐
- GC的前置工作,聊聊GC是如何快速枚举根节点的
本文已收录至GitHub,推荐阅读 Java随想录 微信公众号:Java随想录 原创不易,注重版权.转载请注明原作者和原文链接 目录 什么是根节点枚举 根节点枚举存在的问题 如何解决根节点枚举的问题 ...
- 给微软.Net runtime运行时提交的几个Issues
前言 因为目前从事的CLR+JIT,所以会遇到一些非常底层的问题,比如涉及到微软的公共运行时和即时编译器或者AOT编译器的编译异常等情况,这里分享下自己提的几个Issues. Issues 一.iss ...
- KRPano动态热点专用素材图50多个,加动态热点使用方法
KRPano动态热点专用素材是一种特定形式的序列图,该序列图要求帧的水平和垂直的具体位置必须准确,否则图的动作将会出现错乱,KRPano不支持动态图.目前网上比较匮乏动态热点素材,在此亲手整理制作了5 ...
- Redis漏洞总结--未授权--沙箱绕过--(CNVD-2015-07557)&&(CNVD-2019-21763)&&(CVE-2022-0543)
Redis未授权--沙箱绕过--(CNVD-2015-07557)&&(CNVD-2019-21763)&&(CVE-2022-0543) 环境复现 采用Vulfocu ...
- EarthChat SignalR原理讲解
SignalR原理讲解 SignalR是什么? SignalR 是 Microsoft 开发的一个库,用于 ASP.NET 开发人员实现实时 web 功能.这意味着服务端代码可以实时地推送内容到连接的 ...
- ORACLE DBLink创建
在写测试脚本时,经常需要跨库取数据,SQL本身不支持跨库查找.Oracle提供DBLink链接,支持跨库操作. 1.创建DBLink Create public database link Next_ ...
- 【算法】国庆加班,火锅与Linq.AddRange的奇妙螺旋
在国庆假期的一个傍晚,小悦正在家中享受火锅美食.她嘴里咀嚼着鲜嫩的牛肉,脸上洋溢着满足的微笑.突然,手机铃声响起,打破了这温馨的氛围.她拿起手机一看,是公司打来的电话. "小悦,有个紧急的项 ...
- Python网络编程——TCP套接字通信、通信循环、链接循环、UDP通信
文章目录 基于TCP的套接字通信 加上通信循环 加上链接循环 基于UDP协议的套接字通信 基于TCP的套接字通信 以买手机的过程为例 服务端代码 import socket # 1.买手机 phone ...
- Python学习 —— 初步认知
写在前面 Python是一种流行的高级编程语言,具有简单易学.代码可读性高.应用广泛等优势.它是一种解释型语言,可以直接在终端或集成开发环境(IDE)中运行,而无需事先编译. Python的安装 Py ...
- 小米手机抓取Log教程
当小米手机遇到任何系统下的较为严重的故障时(即此时系统还是基本正常运行的,只是某些功能实现出了问题),例如软件自动退出,SD卡自动卸载,电话无法拨出等等.可以请用户协助抓取log即系统运行日志,来发送 ...