a += b 等价于 a = a+b;
a -= b 等价于 a = a-b;
a *= b 等价于 a = a*b;
a /= b 等价于 a = a/b;
如果你学过编译原理,就应该知道“逆波兰式代码”,采用a+=5这类代码实际会让编译器少费一个中间变量,编译出来的代码效率更高。
简单的说,a=b+5和a=a+5的区别能看出来么?如果用a=a+5其实和a=b+5的处理是一样,都花了中间变量,但是其实对于a=a+5这类只有一个变量的表达式是可以不用中间变量的,所以a+=5是高效的。
不过现在的编译器你都不用考虑两者区别,因为编译器的优化非常好,自动就可以识别这种差别,所以是没区别的。但早期的C编译器没这种功能,所以形成了两种语法。
不知道你能不能听懂,如果站在汇编的高度去看C的这种差别就很简单了,无非就是尽量让值在寄存器中,减少一次内存的读写罢了。