A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 每天进步一点点 中级黑马   /  2014-6-10 12:19  /  2363 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 每天进步一点点 于 2014-6-13 22:00 编辑

在一些资料上看到这样的情况:

                                  运算符的优先级
优先级                               描述                                    运算符
     .                                     .                                           .
     .                                     .                                           .
     .                                     .                                           .
     2                                 正负号                                  +、-
     3                            自增、自减、非                    ++、--、!
     .                                     .                                           .
     .                                     .                                           .
     .                                     .                                           .
    12                                逻辑与                                    &&      
    13                                逻辑或                                     ||
     .                                     .                                           .
     .                                     .                                           .
     .                                     .                                           .


请问:正负号的优先级比自增自减高吗??例题1:int a=2;c=(-a++);请问结果a,c的值是多少??
逻辑与比逻辑或的优先级高吗?
例题2:int a=2;b=4;c=6;a++||++b&&c++;请问结果a,b,c的值是多少??

评分

参与人数 1技术分 +1 收起 理由
傘が咲く + 1

查看全部评分

4 个回复

倒序浏览
  1. #include <stdio.h>
  2. int main()
  3. {
  4. //    int x1,x2;
  5. //    char y1,y2;
  6. //    scanf("%d%c%d%c",&x1,&y1,&x2,&y2);
  7. //    printf("%d%c%d%c\n",x1,y1,x2,y2);
  8.     int a = 2;
  9.     int c = (-a++); // c = -2   解释:++在后,计算时不管表达式等价于 int c  = ( -a );  SO: c = -2  ;当计算完c后,a自增一次。a = 3
  10.     int d = (-++a); // a = 4
  11.   //  int d = (++(-a));错误写法,这里不能这么表示
  12.   //  int d = (-++a);错误写法
  13.     int e = (-(++a)); // a = 5
  14.     printf("%d,%d,%d\n",c,d,e);
  15.     return 0;
  16. }
复制代码

输出结果 -2,-4,-5;
第二问:
  1.     int a=2,b=4,c=6,d;
  2.    // d =  a++||++b && c++; 这么写会有警告,正确写法:如下
  3.     d = a++ || (++b && c++);//这步计算表达式等价于  d = 2 || (5 && 6 ) -> d = 2 || 1 -> d = 1
  4.     printf("%d\n",d); // 输出结果为1
复制代码

评分

参与人数 1技术分 +1 收起 理由
傘が咲く + 1

查看全部评分

回复 使用道具 举报
大龄产妇 发表于 2014-6-10 12:54
输出结果 -2,-4,-5;
第二问:

++在后,忽略++,等表达式结束后,a增1;
++在前,忽略表达式,a增1后再计算表达式。
是这样吗???????打破了我的常规理解
回复 使用道具 举报
大龄产妇 发表于 2014-6-10 12:54
输出结果 -2,-4,-5;
第二问:

如果是这种情况:a++ || (++b && c++)
先计算||右边的是吗??还是先计算左边的???我看到一道题没有括号,就是a++ || ++b && c++,不知道怎么去计算,主要想问的是||和&&优先级相同还是&&高于||????
回复 使用道具 举报
每天进步一点点 发表于 2014-6-11 07:21
如果是这种情况:a++ || (++b && c++)
先计算||右边的是吗??还是先计算左边的???我看到一道题没有括 ...

你看到括号了么?一切都以运算符优先级表说的为准,先算括号中的。我代码已经很清楚,如果不加括号,语法会报警告。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马