在二元运算的基础上,
苹果开发者Mike引入
整数运算的概念。大家可以看下范例代码4-3:
01
// More arithmatic expressions
02
03
#import <Foundation/Foundation.h>
04
05
int
main
(
int
argc
,
const
char
*
argv
[])
{
06
NSAutoreleasePool
*
pool
=
[[
NSAutoreleasePool
alloc
]
init
];
07
08
int
a
=
25
;
09
int
b
=
2
;
10
float
c
=
25.0
;
11
float
d
=
2.0
;
12
13
NSLog
(
@"6 + a / 5 * b = %i"
,
6
+
a
/
5
*
b
);
14
NSLog
(
@"a / b * b = %i"
,
a
/
b
*
b
);
15
NSLog
(
@"c / d * d = %f"
,
c
/
d
*
d
);
16
NSLog
(
@"-a = %i"
,
-
a
);
17
18
[
pool
drain
];
19
return
0
;
20
}
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
最终输出结果:
6 + a / 5 * b = 16
a / b * b = 24
c / d * d = 25.000000
-a = -25
大家可以看到第一个表达式,因为除法和乘法优先级大于加法它们优先计算后再加6得到结果16
第二条NSLog语句引入了一个新的误区。你希望a除以b再乘以b的操作返回a,也就是25,但结果确是24,难道计算机在某个地方迷失了方向?实际情况是因为这个表达式是采用整数运算来求值的。数字的小数部分在运算中丢失。因此计算a除以b,即25除以2时,得到的中间结果是12,而不是期望的12.5。这就是结果为什么最后是24的原因。
第三条,因为是浮点值运算,所以结果正常。
在最后一条中,使用了
一元负号运算符对变量a的值求反。这个一元运算符是用于单个值的运算符,扮演的角色是对一个值求反。
关于
优先级,与其他算术运算符相比,一元负号预算符具有更高的优先级。
Mike在CSDN上传的源代码链接 Arithmetic_Expressions