对++运算符的思考
来源:互联网 发布:pp越狱助手 for mac 编辑:程序博客网 时间:2024/06/08 12:57
C语言中支持++前缀运算符和++后缀运算符,但是前缀运算符的优先级高于后缀的优先级,C语言的运算符优先级共有15等级,在同一等级的运算符中的运算顺序是由结合性决定的。
优先级
运算符
名称或含义
使用形式
结合方向
说明
1
[]
数组下标
数组名[常量表达式]
左到右
()
圆括号
(表达式)/函数名(形参表)
.
成员选择(对象)
对象.成员名
->
成员选择(指针)
对象指针->成员名
2
-
负号运算符
-表达式
右到左
单目运算符
(类型)
强制类型转换
(数据类型)表达式
++
自增运算符
++变量名/变量名++
单目运算符
--
自减运算符
--变量名/变量名--
单目运算符
*
取值运算符
*指针变量
单目运算符
&
取地址运算符
&变量名
单目运算符
!
逻辑非运算符
!表达式
单目运算符
~
按位取反运算符
~表达式
单目运算符
sizeof
长度运算符
sizeof(表达式)
3
/
除
表达式/表达式
左到右
双目运算符
*
乘
表达式*表达式
双目运算符
%
余数(取模)
整型表达式/整型表达式
双目运算符
4
+
加
表达式+表达式
左到右
双目运算符
-
减
表达式-表达式
双目运算符
5
<<
左移
变量<<表达式
左到右
双目运算符
>>
右移
变量>>表达式
双目运算符
6
>
大于
表达式>表达式
左到右
双目运算符
>=
大于等于
表达式>=表达式
双目运算符
<
小于
表达式<表达式
双目运算符
<=
小于等于
表达式<=表达式
双目运算符
7
==
等于
表达式==表达式
左到右
双目运算符
!=
不等于
表达式!= 表达式
双目运算符
8
&
按位与
表达式&表达式
左到右
双目运算符
9
^
按位异或
表达式^表达式
左到右
双目运算符
10
|
按位或
表达式|表达式
左到右
双目运算符
11
&&
逻辑与
表达式&&表达式
左到右
双目运算符
12
||
逻辑或
表达式||表达式
左到右
双目运算符
13
?:
条件运算符
表达式1? 表达式2: 表达式3
右到左
三目运算符
14
=
赋值运算符
变量=表达式
右到左
/=
除后赋值
变量/=表达式
*=
乘后赋值
变量*=表达式
%=
取模后赋值
变量%=表达式
+=
加后赋值
变量+=表达式
-=
减后赋值
变量-=表达式
<<=
左移后赋值
变量<<=表达式
>>=
右移后赋值
变量>>=表达式
&=
按位与后赋值
变量&=表达式
^=
按位异或后赋值
变量^=表达式
|=
按位或后赋值
变量|=表达式
15
,
逗号运算符
表达式,表达式,…
左到右
从左向右顺序运算
在此,需要说明一个问题:
问题1:
对于语句:
int a=4;++(a++);
存在的问题。
根据编译原理的知识可以知道,翻译此语句是
const t1=a;a=t1+1;t2=t1+1;t1=t2;
显然t1已经声明为const常量,所以再将t1赋值显然是错误的,因为t1的值不能被改变。
问题2:
int a=3, b;b=(++a)+(++a);printf("%d",b);打印出来的结果是10
这个问题的正确理解:
采用编译原理的三元组翻译此段:
t1=a;a=t1+1;t2=a+1;a=t2;t3=a+a;b=t3;
问题3:
int a=3;printf("%d %d",a++,a++);
这个输入的结果是
4 3
这个问题的理解涉及到计算机程序空间组织的理解了,
在参数传递的问题中,计算机总是先将后面的参数先传入数据栈中,后传递前面的参数,因此输出的结果就会是4 3了。。。
- 对++运算符的思考
- 对思考的思考
- 从阿里巴巴面试题到对sizeof运算符的思考
- 关于重载运算符的思考
- 对无效思考的思考
- 对操作符重载的思考
- 对.Text的思考
- 对UML的思考
- 对婚姻的思考
- 对递归的思考
- 对"学习"的思考
- 对程序员的思考
- 对Xwindow的思考
- 对未来的思考
- 对软件技术的思考
- 对软件的思考
- 对黑客技术的思考
- 对婚姻的思考
- 移动设备和SharePoint 2013 - 第1部分:概述
- Perl脚本学习心得
- qemu运行xp虚拟机
- 二维数组的new 和 delete
- c 宏定义中的 do {} while(0) 的使用
- 对++运算符的思考
- 关于EF创建数据库出现“用户代码未处理”的问题
- 前言
- String StringBuilder StringBuffer 三者之间的区别
- 实现Java Web程序的自动登录
- Spring学习2:Spring概述
- 网络中乱码问题
- group_concat函数详解
- 安卓新手坑之一:空指针