当前位置: 首页 > news >正文

了解异或的好处和用途

 1.什么是异或?

异或:对于二进制,相同为0 不同为11 ⊕ 1 = 00 ⊕ 0 = 01 ⊕ 0 = 10 ⊕ 1 = 1 

2.异或的好处? 

    异或的好处?1.快速比较两个值 2.xor a a例如 a = 3 011xor 0110003.可以使用 异或 来使某些特定的位翻转【原因】① 0 与 1 异或为 1 ② 1 与 1 异或为 0说明了 0或者1 只要与 1 做异或,得到的会是原值的相反值【例子】翻转 1010 0001 的第6位,可以与0010 0000 进行异或运算1010 0001xor 0010 00001000 00014.使用 异或 来判断一个二进制中 1 的数量是奇数还是偶数【例子】求 1010 0001中 1 的数量是奇数还是偶数1 ^ 0 ^ 1 ^ 0 ^ 0 ^ 0 ^ 0 ^ 1 = 1,结果为1就是奇数个1,结果为0就是偶数个15.校验和恢复6.交换两个值,在不使用其他空间的情况下a = a ^ b;b = a ^ b;a = a ^ b;7.二进制交换奇偶位① 取出所有的偶数位 ---- 与1010 1010 1010...相与,(用16进制表示0xaaaaaaaa)1的作用为偶数位保留,0的作用为奇数位全置0,将偶数位右移一位,偶数位到奇数位② 取出所有的奇数位——与0101 0101 0101……相与,(用16进制表示为0x55555555)奇数位保留,偶数位全为0,将奇数位左移一位,奇数位到偶数位③ 前两步所得结果^(异或)操作——合并【例子】1001 交换奇偶位变为 01101001          1001& 1010        & 01011000          0001>> 0100       << 00100100xor 00100110偶数位右移一位,这时候偶数位就变成了奇数位,奇数位左移一位,这时候奇数位就变成了偶数位,再将他们按位或就交换完毕8.只出现一次的数给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素【原因】因为一个数出现两次就会抵消为0

#include <iostream>
#include <vector>
using namespace std;// 1.快速比较两个值 
int test1(int a,int b) {if((a^b)== 0) return 1;else return 0;
}// 6.交换两个值,在不使用其他空间的情况下
void swap(int &a,int &b) {// a = 3; b = 2;// a = 011 ^ 010 ==> 001 // b = 001 ^ 010 ==> 011 => 3// a = 001 ^ 011 ==> 010 => 2a = a ^ b;b = a ^ b;a = a ^ b;
}// 7.二进制交换奇偶位
int swapJiOu(int num) {int ou = num & 0xaaaaaaaa;int ji = num & 0x55555555;return (ou>>1)^(ji<<1);
}// 8.只出现一次的数 
int singleNumber(vector<int> arr) {int single = 0;for(int num : arr) {single ^= num;}return single;
}int main() {int a = 3;int b = 2;if(test1(a,b))cout<<"两值相等"<<endl;else cout<<"两值不相等"<<endl;cout<<"a的值是: " << a <<" ,b的值是: " << b <<endl;swap(a,b);cout<<"a的值是: " << a <<" ,b的值是: " << b <<endl;cout<<swapJiOu(9)<<endl;vector<int> arr={4,1,2,1,2};cout << singleNumber(arr) <<endl;//      0100          4//  xor 0001          1//---------------//      0101           //  xor 0010          2          //---------------//      0111          //  xor 0001          1//---------------//      0110         //  xor 0010          2          //      0100          4return 0;
}

打印如下: 

heheda@heheda:~/Linux/内存对齐$ g++ xor.cpp -o app
heheda@heheda:~/Linux/内存对齐$ ./app
两值不相等
a的值是: 3 ,b的值是: 2
a的值是: 2 ,b的值是: 3
6
4

http://www.lryc.cn/news/125996.html

相关文章:

  • vue函数式组件
  • Idea Live Template 功能总结
  • 场景入门12----构造脚本搭建栅栏和石头墙
  • 零基础看懂免费开源的Stable Diffusion
  • Zmq适配Win7 SP0 / Win XP/ Win 2k
  • 掌握Python的X篇_30_使用python解析网页HTML
  • 广联达OA前台sql注入+后台文件上传漏洞复现分析
  • No view found for id 0x7f0901c3 for fragment解决以及线上bug排查技巧
  • 腾讯云CVM服务器竞价实例是什么?和按量计费有什么区别?
  • Kali Linux助您网络安全攻防实战
  • JavaEE初阶:多线程 - 编程
  • 一种多策略下RabbitMQ的延时队列实现
  • 解密 AI 客服;在不同硬件设备上运行大型语言模型的可能性
  • 问题:【IntelliJ IDEA】解决idea自动声明变量加finall修饰符问题
  • SpringBoot基于Zookeeper实现分布式锁
  • AT89C51单片机实现单片机串口互动(中断方式,单片机--单片机,应答)
  • 九耶丨阁瑞钛伦特-请说说你在工作中的PRD文档是如何撰写的?
  • Android免打包多渠道统计如何实现
  • Apipost CICD怎么配置?
  • utf-8和utf-8 mb4区别
  • 考研 408 | 【计算机网络】 应用层
  • 设计模式-单例
  • mysql截取最后一个字符之前的数据
  • Flutter 中,ListView 中需要放置 ListView 需要怎么处理才高效?
  • Appium Desktop安装
  • Open3D 最小二乘拟合平面(SVD分解法)
  • Pytorch源码搜索与分析
  • 运维监控学习笔记9
  • gulimall-缓存-缓存使用
  • 概述、搭建Redis服务器、部署LNP+Redis、创建Redis集群、连接集群、集群工作原理