C语言如何利用异或进行两个值的交换详解

 更新时间:2017年09月13日 11:32:14   作者:青儿哥哥  
最近在工作中遇到了两个值交换的需求,发现自己对异或有些忘记,所以索性写出来,方便以后需要的时候参考学习,下面这篇文章主要给大家介绍了关于C语言如何利用异或进行两个值的交换的相关资料,需要的朋友可以参考下。

C语言异或运算

位运算符家族中,最常用的,某过于异或运算符。

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

例如:10100001^00010001=10110000

0^0=0,0^1=1 可理解为:0异或任何数,其结果=任何数

1^0=1,1^1=0 可理解为: 1异或任何数,其结果=任何数取反

     任何数异或自己,等于把自己置0

1)按位异或可以用来使某些特定的位翻转,如对数10100001的第1位和第2位翻转,可以将数与00000110进行按位异或运算。

  10100001^00000110=10100111

      用十六进制表示:0xA1 ^ 0x06= 0xA7

(2)通过按位异或运算,可以实现两个值的交换,而不必使用临时变量。例如交换两个整数a,b的值,可通过下列语句实现:

      a=10100001, b=00000110

      a=a^b; //a=10100111

      b=b^a; //b=10100001

      a=a^b; //a=00000110

(3)异或运算符的特点是:数a两次异或同一个数b(a=a^b^b)仍然为原值a.

利用异或进行两个值的交换

异或有两个很重要的性质:

1、 A^A = 0;

2、A^0 = A;

利用这两个性质,我们就能够利用异或进行两个值的交换。

代码如下:

#include <stdio.h>

int main()
{
 int a = -11;
 int b = -1;
 
 a = a^b;
 b = a^b;
 a = a^b;

 /*或者简写为
  * 
 a ^= b;
 b ^= a;
 a ^= b
 *
 **/
 printf("交换后a = %d,b = %d\n",a,b);
 return 0;
}

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。

相关文章

  • C/C++获取Windows平台CPU占用率的方法

    C/C++获取Windows平台CPU占用率的方法

    最近在做系统信息相关的接口,为了实现跨平台,故在linux和Windows平台获取占用率信息,文章主要介绍Windows下的方法,文中给出了参考代码,需要的朋友可以参考下
    2023-12-12
  • 一篇文章带你用C语言玩转结构体

    一篇文章带你用C语言玩转结构体

    本文主要介绍C语言 结构体的知识,学习C语言肯定需要学习结构体,这里详细说明了结构体并附示例代码,供大家参考学习,有需要的小伙伴可以参考下
    2021-09-09
  • C语言实现字符串字符反向排列的方法详解

    C语言实现字符串字符反向排列的方法详解

    这篇文章主要为大家分享了几种通过C语言实现字符串字符反向排列(不是逆序打印)的方法,文中的示例代码讲解详细,感兴趣的小伙伴可以了解一下
    2022-05-05
  • C++中关键字Struct和Class的区别

    C++中关键字Struct和Class的区别

    这篇文章主要介绍了C++中关键字Struct和Class的区别,本文用大量实例讲解了Struct和Class的区别,需要的朋友可以参考下
    2014-09-09
  • 深入理解C语言指针

    深入理解C语言指针

    关于指针,其是C语言的重点,C语言学的好坏,其实就是指针学的好坏。其实指针并不复杂,学习指针,要正确的理解指针
    2020-02-02
  • C++实现LeetCode(77.Combinations 组合项)

    C++实现LeetCode(77.Combinations 组合项)

    这篇文章主要介绍了C++实现LeetCode(Combinations 组合项),本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-07-07
  • C语言中关于库函数 qsort 快排的用法

    C语言中关于库函数 qsort 快排的用法

    快速排序Qsort是所有学习算法和数据结构最基础的一个部分,也是考试题和面试的一个小重点。本片文章带你了解Qsort的详细用法规则
    2021-09-09
  • C++异步调用方法详解

    C++异步调用方法详解

    这篇文章主要介绍了C++异步调用方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-05-05
  • c++实现排序算法之希尔排序方式

    c++实现排序算法之希尔排序方式

    这篇文章主要介绍了c++实现排序算法之希尔排序方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-07-07
  • C++详细讲解模拟实现位图和布隆过滤器的方法

    C++详细讲解模拟实现位图和布隆过滤器的方法

    位图(bitset)是一种常用的数据结构,常用在给一个很大范围的数,判断其中的一个数是不是在其中。在索引、数据压缩方面有很大的应用。布隆过滤器是由布隆提出的,它实际上是一个很长的二进制向量和一系列随机映射函数。布隆过滤器可以用于检索一个元素是否在一个集合中
    2022-06-06

最新评论