C语言效率问题-两个整型数的交换

2022-08-17 科技 32阅读
说到交换效率,就必须涉及到硬件。在32位机器中,数据寄存器(AX,BC,CX,DX,EX等)都是32位的,在这类机器中,int类型的数据也是32位的,这就是int类型操作最为简洁方便的原因。

加法的操作是,取数到寄存器(两次,一次是被加数,另一次是加数),实施加法运算,并将结果存储到指定地址单元,减法操作于此类似。
赋值操作是,取数,存数。
通常,取存数操作的时间消耗高于寄存器操作,故假定,寄存器加、减操作的时间消耗为1,存储器取存操作的时间消耗为2,依次累计以上三种交换操作来比较优劣,注意这里用的是int类型数据的操作,浮点型数据操作校友区别。
方法1:int c = a; a = b; b = c;
2 + 2 + 2 = 8
方法2:a = a + b; b = a - b; a = a - b;
3 × (2 + 2 + 1) = 15
方法3:a = a + b - (b = a); // 貌似不能完成交换操作?

2 + 2 + 2 + 2 + 1 + 1 = 10
由此可见,方法1最为高效。
声明:你问我答网所有作品(图文、音视频)均由用户自行上传分享,仅供网友学习交流。若您的权利被侵害,请联系fangmu6661024@163.com