异或运算在面试题中的应用

异或运算 是 涉及到数据位运算时常见的处理方式。如何进行异或运算?在对应位上,相同为0,不同1,但其实两个数据异或运算就是进行无进位加法

例如: int a = 7, b = 6,  a ^b = ?

算法1: 相同为0,不同为1

                     

                                                            a ^ b=  :     0         0         0         1

算法2: 无进位相加

                    

                                                             a ^ b=  :     0         0         0         1

异或运算的性质

1)0^N == N  

2)  N^N == 0

3)  异或运算满足交换律和结合律  

       交换律: a^b = b^a

       结合律:a^b^c = a^(b^c)

题目1:如何不用额外变量交换两个数?

//代码段1

#include <stdio.h>

void swap(int* a, int i, int j){
    a[i] = a[i]^a[j];
    a[j] = a[i]^a[j];
    a[i] = a[i]^a[j];
}

int main(){
    
    return 0;
}

代码解析:

为什么执行了 a = a^b; b = a^b; a= a^ b; 这三句代码,a和b的值就被交换了?

设:变量 a = A, b = B;

a = a ^ b;   \Rightarrow a = A^B,  b = B;

b = a ^ b;   \Rightarrow b = B^A^B,  由于异或运算满足交换律,所以,b = B^B^A , 又因为N^N == 0 且 0^N = N, 所以,b = A;

a = a ^ b;   \Rightarrow a = A^B^A = B

<

相关推荐

  1. 计算机运算

    2024-06-15 16:38:07       24 阅读
  2. 面试算法67:最大

    2024-06-15 16:38:07       31 阅读
  3. 华为OD技术面试-最小-2024手撕代码真

    2024-06-15 16:38:07       10 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-06-15 16:38:07       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-06-15 16:38:07       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-06-15 16:38:07       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-06-15 16:38:07       18 阅读

热门阅读

  1. 课时156:脚本发布_简单脚本_变量转化

    2024-06-15 16:38:07       12 阅读
  2. 面试题分享--Spring02

    2024-06-15 16:38:07       9 阅读
  3. win10下使用docker和VMware

    2024-06-15 16:38:07       8 阅读
  4. Android 14 蓝牙主从模式切换

    2024-06-15 16:38:07       8 阅读
  5. C# —— 位运算符

    2024-06-15 16:38:07       5 阅读
  6. vim 存在三种模式:

    2024-06-15 16:38:07       5 阅读
  7. k8s_探针专题

    2024-06-15 16:38:07       7 阅读