【问题标题】:Order of operation for subtraction? [closed]减法运算顺序? [关闭]
【发布时间】:2012-10-01 19:37:39
【问题描述】:

这可能是一个没有受过教育的问题 - 或者是一个奇怪的问题。

我的问题是为什么这段代码不起作用:

            if (up == true)
        {
            SDL_Delay(pause_t);
            player.setY(player.velocity - player.getY());
        }
        if (left == true)
        {
            SDL_Delay(pause_t);
            player.setX(player.velocity - player.getX());
        }

但是,这段代码确实有效:

            if (up == true)
        {
            SDL_Delay(pause_t);
            player.setY(player.getY() - player.velocity);
        }
        if (left == true)
        {
            SDL_Delay(pause_t);
            player.setX(player.getX() - player.velocity);
        }

这两个代码的区别在于,在第一个例子中,我在调用位置函数之前先减去了一部分(物体的速度)。 当我运行这段代码时会发生什么,它不会在轴上移动 1,而是移动 10。 Y轴的大小在10以上,所以我实际上并没有减去它自己的坐标。

但是,在第二段代码中,在调用了我的位置函数之后,我最终减去了速度。 第二段代码发生的情况是对象移动了一个像素(速度的整数值)。

对于那些想知道我在做什么的人,这些是我的 openGL 游戏的控件。用于移动物体。

郑重声明,这不是一个重要的问题。我的代码确实有效。我只是好奇它为什么会这样工作。

【问题讨论】:

  • 我不确定我是否理解。你在问为什么a - b 给出的结果与b - a 不同?
  • 是的,就是这样。我意识到在普通算术中,这是显而易见的原因。但是,处理器在尝试进行算术运算之前调用该函数,对吗?这就是我问这个问题的原因。

标签: math arithmetic-expressions


【解决方案1】:

在第一个例子中,我在调用位置函数之前先减去一部分(物体的速度)。

不,在第一个版本中,您减去的是旧位置,而不是速度。

你描述的代码是:

player.setY((-player.velocity) + player.getY());

这会奏效的。

【讨论】:

  • 不是减法完成-> 那样,与您似乎建议的相反方式相反吗?你总是用第二个数字减去第一个数字。
  • @user1707244 你知道 4 - 2 是 2,对吧?不是 -2?
  • 我可能去错了学校——或者这可能是我们在欧罗巴的做法……或者我完全离开了。当我在小学时,我们被教导 4 - 2 是 -2 ......正如上面评论中所解释的那样,它是这样的 - >。如,从 2 中减去 4 - 反之亦然。
  • @user1707244:即使它是这样做的,它不是在 C 或 C++ 中,永远,你的第一个和第二个代码 sn-ps 仍然会彼此相反。我也认识足够多的欧洲人知道这不是一个大陆范围的符号,而是你错了。
  • @user1707244 如果我可以问,那是哪个国家/地区?至少在荷兰,4 - 2 为正 2
猜你喜欢
  • 2013-11-12
  • 2023-03-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-28
  • 1970-01-01
  • 2010-09-10
  • 1970-01-01
相关资源
最近更新 更多