zoukankan      html  css  js  c++  java
  • 交换函数swap的四种写法

    交换函数swap的四种写法:

    1、经典法——嫁衣法:

    void swap(int *a,int *b) {
        int temp = *a;
        *a = *b;
        *b = temp;
    }

    2、经典改进法——泛型法:(适用于各种参数类型)

    void swap(void *a,  void *b,  int data_type_size) {
        unsigned char *p = (unsigned char *)a;
        unsigned char *q = (unsigned char *)b;
        unsigned char temp;
        while(data_type_size--) {
            temp = *p;
            *p = *q;
            *q = temp;
            p++;
            q++;
        }
    }

    3、赋值法:

    void swap(int *a, int *b) {
        *a = *a + *b;
        *b = *a - *b;
        *a = *a - *b;
    }

    4、异或运算法:

    void swap(int *a, int *b) {
        *a = *a ^ *b;
        *b = *a ^ *b;
        *a = *a ^ *b;
    }

     第三四种方法也可以结合第二种的泛型方法,实现所有数据类型的转换。

    关于异或运算:异或运算是指: 参与运算的两个值,如果两个相应位相同,则结果为0,否则为1。

    异或的3个特点:

    (1) 0^0=0,0^1=1  0异或任何数 = 任何数

    (2) 1^0=1,1^1=0  1异或任何数 = 任何数取反

    (3) 任何数异或自己 = 0

    异或的几个常见用途:

    (1)使某些特定位翻转

      例如对数10100001的第2位和第3位翻转,则可以将该数与00000110进行按位异或运算。

      10100001^00000110 = 10100111

    (2)实现两个值的交换,而不必使用临时变量。如上第四种方法,实质上使用了  A^A = 0; A^0 = A; 这两条性质。

    (3)在汇编语言中经常用于将变量置零:xor ax,ax

    (4)快速判断两个整数值是否相等。

      举例1: 判断两个整数a,b是否相等,则可通过下列语句实现:

      return ( (a ^ b) == 0 )

    参考

    https://www.cnblogs.com/shundong106/p/10213113.html

    https://www.cnblogs.com/tmdsleep/p/9933647.html

  • 相关阅读:
    全局对象
    公用属性与原型链
    内存图
    JS中数据类型的转换
    for in 遍历
    JS里的数据类型
    Collect~Something else
    Spring Batch学习笔记(一)
    C#之WinForm设置控件居中
    C#之使用AutoUpdater自动更新客户端
  • 原文地址:https://www.cnblogs.com/songbeyond/p/12516842.html
Copyright © 2011-2022 走看看