【问题标题】:confusion while subtracting and post decrementing at once一次减法和减法时的混乱
【发布时间】:2019-10-29 12:43:33
【问题描述】:

我陷入了一个递减的问题,代码如下

#include <stdio.h>
int main()
{
int x = 4, y = 3, z;
z = x-- - y;
printf("%d %d %d\n",x,y,z);

return 0;
}

据我所知,输出应该是 4 3 0 我对z值的解释如下: 首先,因为它是后期减量,所以首先我们将 y 的值从 x 减少,即 4-3 等于 1,根据我的说法,我们将再次从这个 1 减少 1(或者如果我不纠正我' m 错了),输出为 0。

【问题讨论】:

  • z4-3,然后 x 递减,而不是 z(导致 3 3 1)。

标签: c operators postfix-operator


【解决方案1】:

表达式x-- 计算为x当前 值,即4。然后从该值中减去y 的值,得到1,这是分配给@ 的值987654324@。 然后,x 作为后减量的副作用而减量。

所以输出将是 3 3 1。

【讨论】:

    【解决方案2】:

    来自 C 标准(6.5.2.4 后缀递增和递减运算符)

    2 后缀 ++ 运算符的结果是操作数的值。 作为副作用,操作数对象的值会递增(即 即,将相应类型的值 1 添加到其中)。见 加法运算符和复合赋值的讨论 有关约束、类型和转换以及影响的信息 对指针的操作。 结果的值计算为 在更新存储值的副作用之前排序 操作数。对于不确定顺序的函数调用, postfix ++ 的操作是单次求值。后缀++ 原子类型的对象是一个读-修改-写操作 memory_order_seq_cst 内存顺序语义。98)

    3 后缀 -- 运算符类似于后缀 ++ 运算符, 除了操作数的值递减(即 减去相应类型的值 1)。

    因此在此声明中

    z = x-- - y;
    

    在减量 4 之前使用变量 x 的值。所以4 - 3 产生1

    但对象 x 本身已递减,在此语句之后其值变为等于 3。

    所以结果你会得到以下输出

    3 3 1
    

    顺便说一句,你可以重写这个语句

    z = x-- - y;
    

    喜欢:)

    z = x --- y;
    

    【讨论】:

    • "z = x --- y;" — 请拍我:D
    猜你喜欢
    • 2012-03-20
    • 1970-01-01
    • 2021-12-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-10
    • 2013-03-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多