美文网首页
交换两个基本数据类型变量的值

交换两个基本数据类型变量的值

作者: Andney | 来源:发表于2019-07-19 17:52 被阅读0次

交换两个基本数据类型变量的值


已知两个基本数据类型的变量a、b,要求交换两个变量的值。下面以double类型为例进行说明:

1. 借助于临时变量的方式

int main(int argc, char *argv[]) {
    double a = 10.5;
    double b = 20.4;
    
    // 1. 先暂存变量a的值到临时变量tmp中
    double tmp = a; 
    // 2. 变量b的值赋值给变量a(即,此时变量a的值是原先变量b的值)
    a = b;
    // 3. 将原先暂存到变量tmp中的变量a的值 赋值给 变量b
    b = tmp;
    
    printf("a = %lf,  b = %lf", a, b); // 输出:a = 20.400000,  b = 10.500000
}

将其封装成一个函数如下:

// 交换两个double变量的值
void swapDouble(double *a, double *b)
{
    double tmp = *a;
    *a = *b;
    *b = tmp;   
}

// 具体使用
double a,b;
swapDouble(&a, &b); // 需要传递两个变量的地址指针,才能在swapDouble方法内修改方法外两个变量a、b的值

2. 两个变量相互加减的方式

void swapDouble(double *a, double *b)
{
    *a = *a + *b; // a的新值为:原先a 和原先b 的和
    *b = *a - *b; // b的新值为  (原先a + 原先b) - 原先b = 原先a 的值 
    *a = *a - *b; // b的新值为  (原先a + 原先b) - 原先a(即b的新值) = 原先a 的值 
}

3. “异或”位运算的方式

位运算操作是由处理器支持的底层操作,因此运行速度很快。尽管现代计算机处理器拥有了更长的指令流水线和更优的架构设计,使得加法和乘法运算几乎与位运算一样快,但是位运算消耗更少的资源。

注意:该方式仅仅适用于两个整数类型变量之间的交换

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

补充内容


异或的规则:

如果a、b两个值不相同,则异或结果为1。

如果a、b两个值相同,异或结果为0。

按位异或的3个特点:

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

1^0=1,1^1=0 1异或任何数等价于任何数取反

任何数异或自己把自己置0

按位异或的几个常见用途:

1. 使某些特定的位翻转

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

10100001^00000110 = 10100111

2. 实现两个值的交换,而不必使用临时变量。

例如交换两个整数a=10100001,b=00000110的值,可通过下列语句实现:

a = a^b; // a=10100111
b = b^a; // b=10100001
a = a^b; // a=00000110

3. 在汇编语言中经常用于将变量置零:

xor a,a

4. 快速判断两个值是否相等

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

return ( (a^b) == 0 );

相关文章

  • 交换两个基本数据类型变量的值

    交换两个基本数据类型变量的值 已知两个基本数据类型的变量a、b,要求交换两个变量的值。下面以double类型为例进...

  • Java中的值交换

    值交换 一、基本数据类型值交换 换值前后没有变量的值发生变化。原因:主函数运行的时候会在栈内存中开辟属于自己的空间...

  • C 语言实例12 - 交换两个数的值

    使用临时变量交换两个数的值 不使用临时变量交换两个数的值

  • 说一下“==”和equals方法的区别

    == 是用来判断两个变量直接的值是否相等,变量就可以分为基本数据类型变量和引用类型变量。如果是基本数据类型的变量,...

  • Python3 & 交换的底层逻辑

    Python 交换变量,可以使用中间变量的方法交换两个变量的值,例如: 但是在Python中 交换两个数的值可以有...

  • 引用传递与值传递

    访问变量分引用传递和值传递 值传递 基本数据类型值的传递,就是将变量的值复制给另一个变量。这两个变量是完全独立的。...

  • JavaScript实现两个变量值交换

    一个经典的问题,“两个变量之间值的交换”。 1、 引入临时变量进行数据交换 引入临时变量,最最基本的方法,看着很l...

  • 第四章 变量、作用域和内存问题

    ECMAScript变量分为两种不同数据类型的值:基本类型值和引用类型值。 基本数据类型:Undefined,Nu...

  • 浅谈变量中的数据类型

    变量的值 ECMAScript 变量可能包含两种不同数据类型的值: 基本类型值:string , number ,...

  • 浅拷贝与深拷贝(JavaScript)

    一、预备知识 ECMAScript变量包含两种不同数据类型的值:基本数据类型和引用数据类型。基本数据类型:名值存储...

网友评论

      本文标题:交换两个基本数据类型变量的值

      本文链接:https://www.haomeiwen.com/subject/efgslctx.html