#include <iostream>
using namespace std;
//加减乘除
void main()
{
int a = 1;
++a;
a++;//前置和后置: 基本类型,无区别;复合类型前置返回引用不复制,效率高
a += 2;//add eax,2
a--;//add eax,1
--a;//add eax,1
a -= 2;//sub eax,2
a *= 2;//shl eax,1
a *= 3;//imul eax,dword ptr [a],3
a *= 8;//shl eax,2
a /= 2;//sar eax,1
a /= 3;//idiv eax,3
cout << a << endl;
a /= 4;//sar eax,2
}
总结:
- 加减乘除指令分别是:add,sub,imul,idiv;
- 移位指令比乘除有更高的效率。
2的倍数时会用移位取代乘除。
add eax,1
为啥没用: inc eax
猜测是编译器没有加优化选项。
用release 后,聪明的编译器直接把结果8 返回了。
如下:
加了volatile 就不会优化。
volatile int a = 1;