运算符
来源:互联网 发布:java 适配器模式详解 编辑:程序博客网 时间:2024/06/06 03:09
运算符
运算符是一种操作方法
运算符列表及优先级
运算符 名称或含义 使用形式 结合性 说明 优先级 [] 数组下标 数组名[常量表达式] 左到右 1 () 圆括号 (表达式)/函数名(形参表) 左到右 1 . 成员选择(对象) 对象.成员名 左到右 1 -> 成员选择(指针) 对象指针->成员名 左到右 1 - 负号运算符 -表达式 右到左 单目运算符 2 (类型) 强制类型转换 (数据类型)表达式 右到左 2 ++ 自增运算符 ++变量名/变量名++ 右到左 单目运算符 2 – 自减运算符 –变量名/变量名– 右到左 单目运算符 2 * 取值运算符 *指针变量 右到左 单目运算符 2 & 取地址运算符 &变量名 右到左 单目运算符 2 ! 逻辑非运算符 !表达式 右到左 单目运算符 2 ~ 按位取反运算符 ~表达式 右到左 单目运算符 2 sizeof 长度运算符 sizeof(表达式) 右到左 2 / 除 表达式/表达式 左到右 双目运算符 3 * 乘 表达式*表达式 左到右 双目运算符 3 % 余数(取模) 整型表达式/整型表达式 左到右 双目运算符 3 + 加 表达式+表达式 左到右 双目运算符 4 - 减 表达式-表达式 左到右 双目运算符 4 << 左移 变量<< 表达式 左到右 双目运算符 5 >> 右移 变量>>表达式 左到右 双目运算符 5 > 大于 表达式>表达式 左到右 双目运算符 6 >= 大于等于 表达式>=表达式 左到右 双目运算符 6 < 小于 表达式<表达式 左到右 双目运算符 6 <= 小于等于 表达式<表达式 左到右 双目运算符 6 == 等于 表达式==表达式 左到右 双目运算符 7 != 不等于 表达式!= 表达式 左到右 双目运算符 7 & 按位与 表达式&表达式 左到右 双目运算符 8 ^ 按位异或 表达式^表达式 左到右 双目运算符 9 | 按位或 表达式|表达式 左到右 双目运算符 10 && 逻辑与 表达式&&表达式 左到右 双目运算符 11 || 逻辑或 表达式||表达式 左到右 双目运算符 12 ?: 条件运算符 表达式1? 表达式2: 表达式3 右到左 三目运算符 13 = 赋值运算符 变量=表达式 右到左 14 /= 除后赋值 变量/=表达式 右到左 14 *= 乘后赋值 变量*=表达式 右到左 14 %= 取模后赋值 变量%=表达式 右到左 14 += 加后赋值 变量+=表达式 右到左 14 -= 减后赋值 变量-=表达式 右到左 14 <<= 左移后赋值 变量<< =表达式 右到左 14 >>= 右移后赋值 变量>>=表达式 右到左 14 &= 按位与后赋值 变量&=表达式 右到左 14 ^= 按位异或后赋值 变量^=表达式 右到左 14 |= 按位或后赋值 变量|=表达式 右到左 14 , 逗号运算符 表达式,表达式,… 左到右 从左向右顺序运算 15
运算符优口诀
括号成员第一; //括号运算符[]() 成员运算符. -> 全体单目第二; //所有的单目运算符比如++、 --、 +(正)、 -(负) 、指针运算*、& 乘除余三,加减四; //这个"余"是指取余运算即% 移位五,关系六; //移位运算符:<< >> ,关系:> < >= <= 等 等于(与)不等排第七; //即== 和!= 位与异或和位或; //这几个都是位运算: 位与(&)异或(^)位或(|) "三分天下"八九十; 逻辑或跟与; //逻辑运算符:|| 和 && 十二和十一; //注意顺序:优先级(||) 底于 优先级(&&) 条件高于赋值; //三目运算符优先级排到13 位只比赋值运算符和","高 逗号运算级最低! //逗号运算符优先级最低
要点
一般来说
- 单目运算符大于双目运算符
- 单目算术运算符>!>&&>||>?:>赋值运算符>逗号运算符
运算符结合性
结合性是为了控制哪个运算符先和常量/变量/函数调用结合.
运算符的结合性在常量/变量/函数调用两端都有运算符且运算符优先级相同时,才会被考虑
例如
x-y+z;//变量y左右两边有 - 和 + 两个运算符,优先级相同//这时候要考虑结合性的问题//两个运算符的结合性凑是左结合性,即自左向右,所以符号 - 先被结合//此语句的效果和(x-y)+z;一样
用运算符设计分支语句
一般来说,我们不可以通过条件运算符来进行分支语句的设计
但运算符中有两种确实可以用来设计分支语句
/*条件运算符 ? :*/a >= b?printf("%d\n",a):printf("%d\n",b);/*||和&&*/a > b || puts("hello");//如果a<=b的话就打印hello,否则什么都不干.a > b && a = 1;//如果a>b的话对a赋值1;否则什么都不干.
运算符实例
int (*p)[4];//指针 int *p[4];//数组 //第一条语句定义了一个指针变量,第二条语句定义了一个数组变量 //但是很多人都搞不清是怎么回事,这个问题要从结合性要看 int (*p)[4]; //变量为p //p首先和*结合,形成(*p),这就表明它是一个指针 //其中4和[]结合,形成[4],表明这是一个数组 //接着(*p)和[4]结合,这表明它是一个指向数组的指针 //很多人又搞不明白,既然第7行说它是一个指针,第8行又说它是一个数组,不知道到底它是个什么东西 //再来一遍,我们研究的是什么,是变量p,[4]和(*p)结合形成了一个数组名为(*p)的数组 //所以说(*p)是数组,p是一个指向数组的指针 //不过我们一般不说(*p)是个数组名,注意了. int *p[4]; //变量为p //4和[]结合,形成[4],表明这是一个数组 //p左边为*,右边为[4].等级相同,右结合性.所以先和[4]结合,形成了p[4],即数组名为p的数组 //p[4]和*结合,产生了一个存储指针的数组?为什么?
0 0
- 运算和运算符
- 运算符
- ??运算符
- 运算符
- << 运算符
- 运算符
- 运算符
- 运算符
- 运算符
- 运算符
- 运算符
- 运算符
- ?? 运算符
- 运算符
- 运算符
- 运算符
- 运算符
- 运算符
- UIView自定义控件
- 1101. Quick Sort (25)
- JavaScript基础_04对象与函数
- YYUC01——Windows本地环境搭建
- JQuery--放大镜效果
- 运算符
- HTTP与NRPC
- Android懒人框架Android annotation
- 第七周项目2建立链队算法库
- 用bootstrap写一个简洁的网页
- Android Studio插件开发实践--从创建到发布
- Hibernate 建立双向多对多关联关系
- 写给进军大数据的你们:
- MySQL聚合函数