在我的计算机科学II课程中,教授认为++, - ,* =等是2个操作。但是,在大会一级,这实际上不是两个行动。有人可以解释或仅仅是为了简单起见吗?
答案 0 :(得分:9)
我实际上认为它是3个操作:读取,增量(或其他),写入。这是假设它从某种共享内存读取到某种本地存储(例如寄存器或堆栈),在本地存储上运行,然后写回。
装配级别的操作数量取决于您的增量,平台,硬件等。
答案 1 :(得分:8)
因为++(例如:b ++)是
的简化b = b + 1
那里有两个操作,即加法(b + 1),然后分配原始变量的加法值。
答案 2 :(得分:2)
为什么在进行复杂性分析时会烦恼?它只是O(1): - )
编辑:请在投票时告诉我原因。由于问题被标记为复杂性,我认为大O概念是最重要的,而不是实际的常量。此外,正如其他答案中已经提到的,这取决于许多因素:计算操作,平台,编译器等的方式。
答案 3 :(得分:1)
我要猜一猜。
也许他的装配选择需要中间存储变量?
add reg_temp, reg_i, 1
mov reg_i, reg_temp
答案 4 :(得分:0)
这不是一个加法加一个二传手吗?
与i + = 1相似?
答案 5 :(得分:0)
教授可能只是指必须取值,加1,然后将其分配回变量。
答案 6 :(得分:0)
在汇编级别,所有操作都在寄存器中完成,因此在A
中有一个变量ADD AX,1
但是,在编译语言中,必须存储所有内容,以便i ++变为(在伪装配中)
MOV AX,i
ADD AX, 1
MOV i, AX
这是三个操作......除非我完全忘记了我的基本架构......
答案 7 :(得分:0)
你提醒我一个很久以前听过的有点“陪审团没有出去”的问题。
“预增量比后增量快”
我刚刚进行了快速谷歌搜索。
答案 8 :(得分:0)
在我看来它应该超过2,因为它有两个含义取决于上下文,当我看到它时我总是要提醒自己。
a = b++
与a = b; b = b + 1
和
a = ++b
与b = b + 1; a = b
这足以让大多数一年级学生离开悬崖。