异或算法

简介: 异或算法

异或:

1表达:a^b=a⊕b=aXORb; 既相同为0,不同为1;

1^1=0; 1^0=1;

用途:

1、交互两个数:a=5,b=10,用异或实现交换

程序代码:

#include<stdio.h>
int main()
{
  int a=5;
  int b=10;
  a=a^b;
  b=a^b;
//  a=a^b;
  printf("%d %d\n",a,b);
  return 0;
} 

2、因为电脑的数都是二进制的,所以可以转化二进制的位数和统计二进制中1或者0是奇数还是偶数。

(1):位反转

举例:10001000 在一些情况下,第四位和第五位需要反转,可以用10001000与00011000进行异或运算。

10001000 ^ 00011000 = 10010000

(2):统计某一位的奇偶数

将某个元素中的每一位逐步异或.

例如a1=1010,则b1=1 ^ 0 ^ 1 ^ 0 = 0,由此可以判断a中为1的位数是奇数还是偶数。

例如a2=10110,则b2=1 ^ 0 ^ 1 ^ 1 ^ 0 =1,由此可以判断a中为1的位数是奇数还是偶数。

3、找出序列中单个最小的数字:

程序代码:

#include<stdio.h>
int main()
{
  int a,b,c,d,e,f,n,m;
  scanf("%d%d%d%d%d",&a,&b,&c,&d,&e);
  n=a^b^c^d^e;
  printf("%d\n",n);
  return 0;
}


扩展:&(与)运算

都是1时结果才为1;

二进制与运算规则:1&1=1 1&0=0 0&0=0

相关文章
|
6月前
|
算法
常用的简单校验算法:校验和,异或校验,crc校验,LRC校验,补码求和,checksum
常用的简单校验算法:校验和,异或校验,crc校验,LRC校验,补码求和,checksum
983 1
|
11月前
|
算法 测试技术 C#
C++字典树算法:找出强数对的最大异或值 II
C++字典树算法:找出强数对的最大异或值 II
|
机器学习/深度学习 算法 测试技术
C++算法:前缀和、前缀乘积、前缀异或的原理、源码及测试用例
C++算法:前缀和、前缀乘积、前缀异或的原理、源码及测试用例
|
机器学习/深度学习 算法
算法提升(二) 异或法
算法提升(二) 异或法
331 2
算法提升(二) 异或法
|
算法 数据安全/隐私保护
异或算法——简单实用的数据加密方法
异或算法或许是最简单实用的数据加密方法
【随笔】数组元素使用异或交换位置的算法引发的思考
【随笔】数组元素使用异或交换位置的算法引发的思考
|
算法
算法题每日一练---第57天:解码异或后的数组
未知 整数数组 arr 由 n 个非负整数组成。
133 0
算法题每日一练---第57天:解码异或后的数组
|
算法
算法题每日一练---第53天:所有子集的异或总和
一个数组的 异或总和 定义为数组中所有元素按位 XOR 的结果;如果数组为 空 ,则异或总和为 0 。
148 1
算法题每日一练---第53天:所有子集的异或总和
|
Rust 算法 安全
【算法学习】1486. 数组异或操作(java / c / c++ / python / go / rust)
给你两个整数,n 和 start 。 数组 nums 定义为:nums[i] = start + 2 * i(下标从 0 开始)且 n == nums.length 。 请返回 nums 中所有元素按位异或(XOR)后得到的结果。
【算法学习】1486. 数组异或操作(java / c / c++ / python / go / rust)