[免费下载 c语言深度解剖[1]-第13部分
按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!
上面的例子很简单,那我们把括号去掉看看:
inti
=
3;
++i+++i+++i;
天啦!这到底是什么东西?好,我们先看看这个:a+++b和下面哪个表达式想当:
A);a+++b;
B);a+++b;
2。7。2,贪心法
C语言有这样一个规则:每一个符号应该包含尽可能多的字符。也就是说,编译器将程
序分解成符号的方法是,从左到右一个一个字符地读入,如果该字符可能组成一个符号,
那么再读入下一个字符,判断已经读入的两个字符组成的字符串是否可能是一个符号的组
成部分;如果可能,继续读入下一个字符,重复上述判断,直到读入的字符组成的字符串
已不再可能组成一个有意义的符号。这个处理的策略被称为“贪心法”。需要注意到是,除
了字符串与字符常量,符号的中间不能嵌有空白(空格、制表符、换行符等)。比如:
是
单个符号,而是两个等号。
按照这个规则可能很轻松的判断
a+++b表达式与
a+++b一致。那
++i+++i+++i;会被解
析成什么样子呢?希望读者好好研究研究。另外还可以考虑一下这个表达式的意思:
a+++++b;
2。8,2/(…2)的值是多少?
除法运算在小学就掌握了的,这里还要讨论什么呢?别急,先计算下面这个例子:
2/(…2)的值为多少?2%(…2)的值呢?
如果与你想象的结果不一致,不要惊讶。我们先看看下面这些规则:
假定我们让
a除以
b,商为
q,余数为
r:
q=a/b;
r=a%b;
这里不妨先假定
b大于
0。
我们希望
a、b、q、r之间维持什么样的关系呢?
1,最重要的一点,我们希望
q*b
+r
a,因为这是定义余数的关系。
2,如果我们改变
a的正负号,我们希望
q的符号也随之改变,但
q的绝对值不会变。
3,当
b》0时,我们希望保证
r》=0且
r=0且
b》0时,保证
|r|=0。后
面部分的保证与性质
2或性质
3比较起来,限制性要弱得多。
通过上面的解释,你是否能准确算出
2/(…2)和
2%(…2)的值呢?
2。9,运算符的优先级
2。9。1;运算符的优先级表
C语言的符号众多,由这些符号又组合成了各种各样的运算符。既然是运算符就一定有
其特定的优先级,下表就是
C语言运算符的优先级表:
优先级运算符名称或含义使用形式结合方向说明
1
''数组下标数组名'常量表达式'
左到右
()圆括号
(表达式)/函数名(形
参表)
。成员选择(对象)对象。成员名
…》成员选择(指针)对象指针…》成员名
…负号运算符…表达式单目运算符
(类型)强制类型转换(数据类型)表达式
++自增运算符++变量名/变量名+
+单目运算符
…自
减运算符变量名/变量名…单
目运算符
2
*取值运算符*指针变量右到左单目运算符
&取地址运算符&变量名单目运算符
!逻辑非运算符!表达式单目运算符
~按位取反运算符~表达式单目运算符
sizeof长度运算符sizeof(表达式)
/除表达式/表达式双目运算符
3
*乘表达式*表达式
左到右
双目运算符
%余数(取模)
整型表达式/整型表
达式
双目运算符
4
+加表达式+表达式
左到右
双目运算符
…减表达式…表达式双目运算符
5
》表达式双目运算符
》大于表达式》表达式双目运算符
6
》=大于等于表达式》=表达式
左到右
双目运算符