Chinaunix首页 | 论坛 | 博客
  • 博客访问: 663184
  • 博文数量: 78
  • 博客积分: 4990
  • 博客等级: 上校
  • 技术积分: 1386
  • 用 户 组: 普通用户
  • 注册时间: 2007-07-13 19:25
文章分类

全部博文(78)

文章存档

2010年(6)

2009年(25)

2008年(47)

我的朋友

分类: C/C++

2009-01-13 16:10:22

1。1 基本算数操作符
请问下面程序的输出?
main()
{
  int x;
  x = -3 + 4 * 5 - 6;
  printf("%d\n",x);
  x = 3 + 4% 5 - 6;
  printf("%d\n",x);
  x = -3 *4 % -6 /5;
  printf("%d\n",x);
  x = (7 + 6) % 5 - 2;
  printf("%d\n",x);
}
 
这个题总体说来很基础,也很简单我在这里说下答案就行了:
11; 1; 0; 1
 
 
赋值操作符
 
请问下面的输出是什么?
#define PRINT(x)  printf("%d\n",x)
 
main()
{
  int x = 2, y, z;
 
  x *= 3 + 2; PRINT(x);
  x *= y = z = 4; PRINT(x);
  x = y == z; PRINT(x);
  x == (y == z); PRINT(x);
}
 
在分析这个题的时候我们不需对运算符的优先级很熟悉,从运算符的优先级我们可以知道 ×= 排在倒数第二的位置上,因此是优先级相当低的运算符了。
故: (1)x *= 3 + 2  => x *= 5 => x = 10;
在分析第二小题的时候光是知道上面的还不够,因为 = 和 ×= 的优先级一样,因为我们还必须知道他们的结合方向是:从右到左;
故: (2)x *= y = z = 4 = > x *= y = 4 => x *= 4 => x = 10 * 4 = 40;
因为 == 运算符的优先级高于 =,又由于前面 y = z = 4的,所以 y == z 应当为真。
故:  (3)x = y == z => x = 1;
最后一题化简为: x == 1,由于这是一个等于运算符。
故: (4)x = 1(x还是保持了它在3小题中的值,x的值并未有改变)。
 
阅读(726) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~