• C语言中 -a++ 、-++a运算顺序解析


    -a++ ,如果a=3,那么-a++输出的结果是多少? -3还是-4?

    一、首先,

    先来了解一下算术运算符的优先级和结合性:

    运算符优先级结合性
    ++、--、+(正)、-(负)同级

    ^

    |

    |

    右结合
    *、/、%同级左结合
    +(加)、-(减)同级左结合

    在C语言中,计算表达式的值也需要按运算符的优先级从高到低的顺序进行计算。

    例如,表达式 a+b*c 相当于 a+(b*c).

    若操作数两侧运算符的优先级相同,则按结合性(结合方向)决定计算顺序,

    若结合方向为“从左到右”,则操作数先与左边的运算符结合;

    若结合方向为“从右到左”,则操作数先与右边的运算符结合;

    例如,表达式-a++,- 与 ++ 同级,此时按结合方向决定计算顺序(右结合),相当于 -(a++)。

    二、其次,

    我们来运行一下 -a++ 感受一下:

    1. #include
    2. int main() {
    3. int a = 3;
    4. int b = 5;
    5. printf("%d\n",-a++);
    6. printf("%d\n",a);
    7. printf("%d\n",-++b);
    8. printf("%d\n",b);
    9. return 0;
    10. }

    在运行结果出来之前,我们先来猜猜输出结果是怎样的? -4  4 -6  6 ?如果是这样的话大概忘记了++前置和后置了?

    运行结果:

    使用的编译软件:CLion

    ~~~结果有疑惑?请看下方解惑~~~

    (初学者提示:下图中左边箭头所指即当前程序运行到这一行,运行到当前行时右边会有变量当前取值。)

     

    图1: 此时我们发现 -a++ 中,a的值还是3,这是因为 a++ ,++后置,

    所以在这里print 输出结果是-3,

    图2:在这第6行运行完后,a++生效,也就是a=a+1,这时候a=4,所以在这里第7行运行print输出的结果是4。

     

     图3:这里这个b是为了对比-a++的结果的。-++b,意思是 -(++b),++前置,那么我们先b=b+1,这时候b=6,再走-b的输出。也就是print 输出 -6。

     图4:这里输出b,此时我们从第9行时b已经++b,因此b=5+1=6,所以在这里输出为6。

    三、最后,

    综上,-a++ ,如果a=3,那么-a++输出的结果是-3,运算顺序还是 -(a++),只是++后置,此时a=a+1要在执行完这一行才执行,如果是++前置,那么也就是 -++a 的情况,那么输出的结果就是-4。

  • 相关阅读:
    指针和数组笔试题解析
    数据结构与算法3-栈
    Maven依赖详解
    网络原理(一)网络基础,包括IP ,网络相关的定义
    小程序页面跳转使用reLaunch遇到的坑
    C#变量命名规则(命名规范)
    壁纸小程序Vue3(分类页面和用户页面基础布局)
    vue项目开发环境工具-node
    I2C总线实现逻辑
    通过Python Pandas分析数据上涨下跌趋势的方法:求离散数据的差分、导数
  • 原文地址:https://blog.csdn.net/c_lanxiaofang/article/details/127731465