在我的计算机科学 II 课上,教授考虑了 ++、--、*= 等。为2次操作。然而,在程序集级别,这实际上并不是两个操作。有人可以解释一下还是这只是为了简单起见?

有帮助吗?

解决方案

其实我认为这是3个操作:阅读,增量(或其他),写。这是假设它是从某种共享存储器的读入某种本地存储(例如寄存器或堆栈),在本地存储工作,则写回。

有多少业务是在装配水平将取决于你什么增加,平台,硬件等。

其他提示

由于++(例如:乙++)是的简化

b = b + 1 

有两个操作那里,除了(B + 1),然后将除了原有的变量的值的分配。

为什么这样做的复杂性分析时,烦恼呢?它仅仅是O(1): - )

编辑:请让我知道,当你将其否决原因。由于这个问题被标记的复杂的,我认为大O字的概念是最重要的,而不是实际的常量。此外,由于已经在其他的答案中提到,有多少业务,这是取决于很多的因素:你算操作,平台,编译器等方式

我将提出一些猜测。

  • 您的教授指的是解释语言吗?
  • ++i 与 i++ 不同,也许他指的是那个?
  • 也许他选择的汇编语言需要中间存储变量?

    add reg_temp, reg_i, 1
    mov reg_i, reg_temp
    

是不是加成加一个setter?

类似于I + = 1?

在教授可能是单指具有取的值,把它加1,然后分配回该变量。

在组件级别一切都在这样具有一个可变的寄存器来实现

ADD AX,1

然而,在编译语言一切必须被存储,所以我++变为(在伪组件)

MOV AX,i
ADD AX, 1
MOV i, AX

这是三个操作......除非我已经忘记了我的基本架构完全...

你让我想起了一个“陪审团尚未出炉“我很久以前就听说过的问题。

“预增量比后增量快”

我刚刚做了一个快速的谷歌搜索。

  1. 许多人仍然认为这是事实。
  2. 其他人则认为编译器经过如此优化,无法对比较高级的代码进行基准测试。
  3. 然而 其他人 认为没有区别。

应该在我看来超过2因为它取决于具体的环境两层方面的含义,我总是提醒他们自己,当我看到它。

a = b++相同a = b; b = b + 1

a = ++b相同b = b + 1; a = b

这是一个足以混淆发送大多数一年级学生下悬崖的。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top