zoukankan      html  css  js  c++  java
  • 交换算法经常使用的两个数的值

    交换两个变量值,老话题,下面总结的各种方法是。

    为了方便,首先定义两个变量。

    int a = 1;
    int b = 2;

    一 借助暂时变量

    1 交换变量值

    int tmp;
    tmp = a;	// tmp = 1
    a = b;		// a = 2
    b = tmp;	// b = 1


    2 交换地址

    int *p;		
    p = &a;		// tmp->1 
    a = &b;		// a->2
    b = p;		// b ->1


    二 不借助第三个变量

    1 加减法

    a = a + b	// a = 3
    b = a - b	// b = 1
    a = a - b	// a = 2

    2 乘除法

    a = a * b // 2
    b = a / b // 2
    a = a / b // 1


    3 异或法

    // a:0000 0001
    // b:0000 0010
    a = a ^ b // a:0000 0011
    b = a ^ b // b:0000 0001
    a = a ^ b // a:0000 0010


    对于上面各种方法,中间变量须要额外的内存空间。
    加减法和乘除法有可能出现越界,或者被除数为0的情况,并且仅仅适用于数字运算;

    比較好的是最后一种,内存低层操作(/*通用的各种数据类型*/,这个地方是我弄错,异或仅仅能用于整型, 感谢xiacanni的提醒)。



    版权声明:本文博主原创文章。博客,未经同意不得转载。

  • 相关阅读:
    Jzoj4729 道路修建
    Jzoj4727 挺进
    Jzoj4727 挺进
    Jzoj4726 种花
    Jzoj4726 种花
    Jzoj4725 素数序列
    Jzoj4725 素数序列
    力扣算法题—040组合求和二
    力扣算法题—039组合求和
    力扣算法题—038报数
  • 原文地址:https://www.cnblogs.com/bhlsheji/p/4879018.html
Copyright © 2011-2022 走看看