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

学习 时间:2026-03-29 17:26:40 阅读:7473
C语言效率问题-两个整型数的交换我想问两个个有关两种写法或算法的运行效率问题,就是哪个运行结束的最快,哪个运行结束的最慢.首先是第一个:交换两个整型数的值,a和b 第一种方法是:int c = 0;c = a;a = b;b = c;第二种方法是:a = a + b;b = a - b;a = a - b;第三种方法是:a=a+b-(b=a);三种方法都能实现整数a和b的交换,请问哪个方法运行结束时间最短,那种方法运行结束时间最长,并请附上原因.

最佳回答

外向的小鸭子

阔达的大米

2026-03-29 17:26:40

说到交换效率,就必须涉及到硬件。在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最为高效。 再问: 我们老师教过:尽量减少变量的定义来增加效率,定义了一个参数,是不是会降低效率? 再答: 多定义变量,会增加存储器单元消耗,与效率关系不大。

最新回答共有2条回答

  • 光亮的银耳汤
    回复
    2026-03-29 17:26:40

    说到交换效率,就必须涉及到硬件。在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最为高效。 再问: 我们老师教过:尽量减少变量的定义来增加效率,定义了一个参数,是不是会降低效率? 再答: 多定义变量,会增加存储器单元消耗,与效率关系不大。

上一篇 初中英语同步听力与阅读训练8A p77

下一篇 怎样判断贴片电解电容的正负极